{"id":91,"date":"2012-09-11T02:00:58","date_gmt":"2012-09-11T02:00:58","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/joepdel\/?p=91"},"modified":"2012-09-11T02:00:58","modified_gmt":"2012-09-11T02:00:58","slug":"swt-standard-widget-toolkit","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/joepdel\/2012\/09\/11\/swt-standard-widget-toolkit\/","title":{"rendered":"SWT Standard Widget Toolkit"},"content":{"rendered":"<p style=\"text-align: center\"><strong>SWT<\/strong><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/blog.espol.edu.ec\/joepdel\/files\/2012\/09\/wb-create-swt-shell.png\" alt=\"SWT\" \/><\/p>\n<p>SWT (Standard Widget Toolkit) es una plataforma de desarrollo de Interfaz gr\u00e1fica de usuario que no tiene nada que envidiar a Swing y AWT (plataformas GUI actuales de Java). Fue creada por IBM para facilitar el desarrollo del IDE Eclipse y actualmente es mantenida por esta ultima (Eclipse).<br \/>\nUna de las ventajas de SWT es que utilizan menos memoria que Swing, raz\u00f3n por la cual es una buena opci\u00f3n para el desarrollo de aplicaciones clientes. Pero bueno, comencemos de una vez\u2026<br \/>\nPrimero tenemos que descargar la libreria SWT desde http:\/\/www.eclipse.org\/swt\/. Una vez descargado, descomprimimos el .zip e importamos los .jar como librer\u00edas externas. Con ello ya estamos listos para programar la aplicaci\u00f3n.<br \/>\nEntonces vamos a crear una ventana con una caja de texto y un bot\u00f3n, La idea es que ingresaremos nuestro nombre a la caja de texto y al presionar el bot\u00f3n nos mostrara un mensaje personalizado (con el nombre incluido).<br \/>\nPrimero importamos las librer\u00edas a utilizar:<br \/>\nimport org.eclipse.swt.SWT;<br \/>\nimport org.eclipse.swt.graphics.*;<br \/>\nimport org.eclipse.swt.events.*;<br \/>\nimport org.eclipse.swt.widgets.*;<br \/>\nEn la primera l\u00ednea importamos una clase denominada SWT. Esta clase vendr\u00eda a ser muy importante en cuanto a su importaci\u00f3n, debido a que dentro de ella se encuentran declaradas la mayor parte (por no decir todo) de constantes de todo tipo, como por ejemplo constantes de iconos de im\u00e1genes, de nombres de teclas de keyboard, de colores, de tipos de formato de texto, etc.<br \/>\nLuego importamos la librer\u00eda graphics porque utilizaremos la clase Rectangle para la ubicaci\u00f3n de la ventana principal. El conjunto de clases que conforman esta librer\u00eda est\u00e1n dirigidas para el tratamiento de gr\u00e1ficos, dentro de ella podemos encontrar clases como Image, Point, Font entre otras (clases que tambien las tiene Java en AWT).<br \/>\nTambien importamos la librer\u00eda events, que contiene todos los tipos de eventos de los controles a utilizar. En esta ocasi\u00f3n haremos uso del evento clic cuando se presione el bot\u00f3n.<br \/>\nPor ultimo, importamos la librer\u00eda widgets, que es en donde se encuentran todos los controles gr\u00e1ficos que permitir\u00e1n al usuario interactuar con la aplicaci\u00f3n.<br \/>\nComo es normal, declaramos nuestra clase, la cual la he denominado Application:<br \/>\nclass Application{<br \/>\nEscribimos el tradicional m\u00e9todo main, punto de entrada de la aplicaci\u00f3n. Dentro de este m\u00e9todo es donde construiremos la interfaz de usuario, para posteriormente mostrarla.<br \/>\npublic static void main(String[] args){<br \/>\nEn SWT una ventana normal es referenciada por un objeto Shell. Para cualquier aplicaci\u00f3n SWT es necesario utilizar un objeto display, debido a que \u00e9ste objeto constituye la pantalla actual en la que se creara la ventana.<br \/>\nDisplay display = new Display();<br \/>\nfinal Shell shell = new Shell(display);<br \/>\nVamos con el primer control a utilizar, llamado Group, que es una especie de panel encerrado por un borde. Si observan en la creaci\u00f3n del control, tiene como primer par\u00e1metro el contenedor donde va a estar situado \u00e9ste control (en este caso shell que es la ventana principal) y como segundo par\u00e1metro una constante tomada de la clase SWT\u2026. Se explica el contructor de este objeto, porque los dem\u00e1s objetos que conforman la librer\u00eda widget tiene la misma forma (todos tiene la misma forma de constructor).<br \/>\nGroup group = new Group(shell,SWT.NULL);<br \/>\nUtilizamos el m\u00e9todo setText(\u2026) para colocar una etiqueta en el borde.<br \/>\ngroup.setText(\"Demo Java &amp; SWT\");<br \/>\nSituamos el control dandole las coordenadas dentro del formulario a trav\u00e9s del m\u00e9todo setBounds(\u2026.)<br \/>\ngroup.setBounds(20,20,300,100);<br \/>\nHasta all\u00ed se ha visto un primer control de SWT. Ahora pasaremos a ver los dem\u00e1s controles a utilizar en nuestra aplicaci\u00f3n. La creaci\u00f3n y construcci\u00f3n de estos controles se realiza de la misma forma como se hizo con el control Group.<br \/>\nLabel que representa a una etiqueta. SWT.LEFT para que el texto se ubique a la izquierda.<br \/>\nLabel label = new Label(group,SWT.LEFT);<br \/>\nlabel.setText(\"Ingrese su nombre :\");<br \/>\nlabel.setBounds(30,25,100,25);<br \/>\nText que representa a una caja de entrada de texto. En este caso la declaramos como final debido a que se va a utilizar dentro de una redefinici\u00f3n de una interfaz (la interfaz de evento clic de boton). Hay que notar que en su constructor, el segundo par\u00e1metro lo constituye un conjunto de constantes separada por el car\u00e1cter \u201c|\u201d \u2026 esto es v\u00e1lido para todos los controles. SWT.SINGLE para que no sea multil\u00ednea y SWT.BORDER para que este contenido dentro de un borde<br \/>\nfinal Text text = new Text(group,SWT.SINGLE | SWT.BORDER);<br \/>\ntext.setBounds(150,25,120,20);<br \/>\nButton que representa a un bot\u00f3n. En su segundo par\u00e1metro declaramos SWT.PUSH ya que hace referencia a un bot\u00f3n normal. (Existen otros tipos de botones que son identificados con otras constantes)<br \/>\nButton button = new Button(group,SWT.PUSH);<br \/>\nbutton.setText(\"Click me !\");<br \/>\nbutton.setBounds(170,65,100,25);<br \/>\nAhora asociaremos el escuchador de evento clic que en SWT esta dado por un objeto SelectionListener.<br \/>\nbutton.addSelectionListener(new SelectionListener(){<br \/>\nDentro de ello re-definimeros dos metodos importantes que administra el escuchador de evento SelectionListener.<br \/>\nPrimero widgetDefaultSelected(\u2026) no relevante es nuestra aplicaci\u00f3n.<br \/>\npublic void widgetDefaultSelected(SelectionEvent event) {}<br \/>\nY segundo widgetSelected (\u2026) que tiene como par\u00e1metro un objeto SelectioEvent que es el que registra informaci\u00f3n sobre el evento de selecci\u00f3n(clic).<br \/>\npublic void widgetSelected(SelectionEvent event) {<br \/>\nEste m\u00e9todo se ejecuta cuando el boton es presionado. Entonces aqu\u00ed se definira el control para mostrar el mensaje personalizado.<br \/>\nPara mostrar el mensaje utilizaremos el control MessageBox.<\/p>\n<p>MessageBox messageBox = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION);<br \/>\nmessageBox.setText(\"Mensage desde SWT\");<br \/>\nmessageBox.setMessage(\"Bienvenido \"+text.getText() + \" a conocer SWT !!!\");<br \/>\nPara lanzarlo, es decir, mostrarlo, utilizaremos el metodo open()<br \/>\nmessageBox.open();<br \/>\n}<br \/>\n});<br \/>\nBueno\u2026 hasta aqu\u00ed esta el 95% de la aplicaci\u00f3n. Lo que resta son lineas de codigo que personalizan nuestra ventana principal.<br \/>\nUn t\u00edtulo<br \/>\nshell.setText(\"Mi primera aplicacion con SWT\");<br \/>\nUn tama\u00f1o<br \/>\nshell.setSize(340,150);<br \/>\nLa situamos en el centro de la pantalla, para lo cual tendremos que hacer uso de un objeto Monitor para poder obtener sus dimensiones atravez de un objeto Rectangle.<br \/>\nMonitor primary = display.getPrimaryMonitor();<br \/>\nRectangle bounds = primary.getBounds();<br \/>\nRectangle rect = shell.getBounds();<br \/>\nint x = bounds.x + (bounds.width - rect.width) \/ 2;<br \/>\nint y = bounds.y + (bounds.height - rect.height) \/ 2;<br \/>\nUbicamos la venta de la aplicacion<br \/>\nshell.setLocation(x, y);<br \/>\nMostramos la ventana de la aplicaci\u00f3n al usuario a travez del metodo open()<br \/>\nshell.open();<br \/>\nEl siguiente segmento de codigo es para controlar que la ventana siga mostrandose hasta que sea cerrada o destruida. En tal caso, la pantalla sera liberada del formulario.<br \/>\nwhile (!shell.isDisposed()) {<br \/>\nif (!display.readAndDispatch())<br \/>\ndisplay.sleep();<br \/>\n}<br \/>\ndisplay.dispose();<br \/>\n}<br \/>\n}<br \/>\nAqu\u00ed se tiene todo el codigo:<br \/>\nimport org.eclipse.swt.SWT;<br \/>\nimport org.eclipse.swt.graphics.*;<br \/>\nimport org.eclipse.swt.events.*;<br \/>\nimport org.eclipse.swt.widgets.*;<br \/>\nclass Application{<br \/>\npublic static void main(String[] args){<br \/>\nDisplay display = new Display();<br \/>\nfinal Shell shell = new Shell(display);<br \/>\nGroup group = new Group(shell,SWT.NULL);<br \/>\ngroup.setText(\"Demo Java &amp; SWT\");<br \/>\ngroup.setBounds(20,20,300,100);<br \/>\nLabel label = new Label(group,SWT.LEFT);<br \/>\nlabel.setText(\"Ingrese su nombre :\");<br \/>\nlabel.setBounds(30,25,100,25);<br \/>\nfinal Text text = new Text(group,SWT.SINGLE | SWT.BORDER);<br \/>\ntext.setBounds(150,25,120,20);<\/p>\n<p>Button button = new Button(group,SWT.PUSH);<br \/>\nbutton.setText(\"Click me !\");<br \/>\nbutton.setBounds(170,65,100,25);<br \/>\nbutton.addSelectionListener(new SelectionListener(){<br \/>\npublic void widgetDefaultSelected(SelectionEvent event) {}<br \/>\npublic void widgetSelected(SelectionEvent event) {<br \/>\nMessageBox messageBox = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION);<br \/>\nmessageBox.setText(\"Mensage desde SWT\");<br \/>\nmessageBox.setMessage(\"Bienvenido \"+text.getText() + \" a conocer SWT !!!\");<br \/>\nmessageBox.open();<br \/>\n}<br \/>\n});<br \/>\nshell.setText(\"Mi primera aplicacion con SWT\");<br \/>\nshell.setSize(340,150);<br \/>\nMonitor primary = display.getPrimaryMonitor();<br \/>\nRectangle bounds = primary.getBounds();<br \/>\nRectangle rect = shell.getBounds();<br \/>\nint x = bounds.x + (bounds.width - rect.width) \/ 2;<br \/>\nint y = bounds.y + (bounds.height - rect.height) \/ 2;<br \/>\nshell.setLocation(x, y);<br \/>\nshell.open();<br \/>\nwhile (!shell.isDisposed()) {<br \/>\nif (!display.readAndDispatch())<br \/>\ndisplay.sleep();<br \/>\n}<br \/>\ndisplay.dispose();<br \/>\n}<br \/>\n}<br \/>\nSe ejectua, y obtendremos el siguiente resultado:<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/blog.espol.edu.ec\/joepdel\/files\/2012\/09\/SWT1.jpg\" alt=\"SWT1\" \/><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/blog.espol.edu.ec\/joepdel\/files\/2012\/09\/SWT2.jpg\" alt=\"SWT2\" \/><\/p>\n<p>Fuentes:<br \/>\nhttp:\/\/haferson.wordpress.com\/2009\/05\/15\/programando-con-swt-java\/<br \/>\nhttp:\/\/inside.java2script.com\/2007\/06\/02\/tutorial-of-java2script-swt-and-simple-rpc-application.html<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SWT SWT (Standard Widget Toolkit) es una plataforma de desarrollo de Interfaz gr\u00e1fica de usuario que no tiene nada que envidiar a Swing y AWT (plataformas GUI actuales de Java). Fue creada por IBM para facilitar el desarrollo del IDE Eclipse y actualmente es mantenida por esta ultima (Eclipse). Una de las ventajas de SWT [&hellip;]<\/p>\n","protected":false},"author":6319,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-91","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/posts\/91","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/users\/6319"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/comments?post=91"}],"version-history":[{"count":1,"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/posts\/91\/revisions"}],"predecessor-version":[{"id":95,"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/posts\/91\/revisions\/95"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/media?parent=91"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/categories?post=91"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/joepdel\/wp-json\/wp\/v2\/tags?post=91"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}