Introducción a SWT

0
47820

Introducción

 

Este tutorial pretende ser una guía inicial, para poder
desarrollar GUIs en java utilizando eclipse y SWT (Standard Widget Toolkit).

Gracias al API que ofrece SWT se pueden realizar GUIs 
portables muy ligadas a la interfaz gráfica de cada sistema operativo. Es decir
que un mismo código tendrá un  “aspecto” distinto si corre sobre Windows que
sobre Linux.

A lo largo del tutorial se explicara como configurar el
eclipse para poder trabajar con el API de SWT, se creara un proyecto sencillo
swt desde cero en Linux  aunque la mayoría de las acciones son iguales si se
desarrolla bajo Windows  las que no lo son serán explicadas también para
Windows.

 

Entorno

 

Estas son las versiones con las que se ha desarrollado el
tutorial, esto no quiere decir, que otras versiones no sean válidas, por ejemplo
de la máquina virtual con la versión 1.4 también he realizado aplicaciones swt.

 

Java: 1.5.0_06

Eclipse:
3.1.0

Swt:  org.eclipse.swt_3.1.0.jar y
org.eclipse.swt.gtk.linux.x86_3,1,0.jar

 

Configuración

 

Lo primero que debemos comprobar es si tenemos los jar de
swt en el directorio de plugins de eclipse. De no ser así deberemos
descargárnoslos de

http://www.eclipse.org/swt

 

Creación de un proyecto

 

Abrimos el eclipse y creamos un nuevo proyecto:

 

En el Package Explorer con el botón derecho del ratón, NEW
-> PROJECT -> JAVA

 

 

 

 

Se abrirá el wizard de nuevo proyecto de eclipse:

 

 

 

Botón de siguiente y tecleamos el nombre del proyecto: (TestSWT)

 

 

 

Damos al botón de finalizar, y eclipse nos creará el
nuevo proyecto.

Por aquello de ser organizados, vamos a crear un
package en el proyecto que acabamos de hacer, para ello click con el botón
derecho sobre el nombre del proyecto en el  Package Explorer: NEW -> PACKAGE

 

Eclipse nos mostrará la siguiente pantalla:

 

 

 

Tecleamos el nombre del Package en este caso: com y al
botón de Finalizar.

 

Seguimos creando, ahora la clase de nuestra primera
ventana con swt.

 

Con el botón derecho sobre el nombre del package: NEW
-> CLASS

 

Se nos mostrará la siguiente pantalla:

 

 

 

Como no podía ser de otra forma nuestra primera clase y
ventana en swt es el típico HelloWorld. Tecleamos esto como nombre de la
clase, como el código de toda la clase lo pongo a continuación, no nos hace
falta rellenar nada más, damos al botón de finalizar.

 

A estas alturas, nuestro árbol del proyecto deberá
tener un aspecto como este:

 

 

Antes de ponernos con el código, debemos añadir al
proyecto las librerías swt necesarias, de no hacerlo así, eclipse resaltará
gran parte de nuestro código como erróneo.

 

 

Para añadirlas, botón derecho sobre el nombre de
nuestro proyecto: PROPERTIES -> JAVA BUILT PATH –> LIBRARIES

 

 

 

Vamos a añadir los dos .jar de swt que hemos chequeado
al principio que teníamos en el directorio plugins de eclipse.

Click en Añadir jars externos

 

Seleccionamos org.eclipse.swt_3.1.0.jar
y org.eclipse.swt.gtk.linux.x86_3,1,0.jar.

 

Click sobre el botón de
aceptar.

 

Comprobamos que las librerías se han añadido al
proyecto correctamente:

 

 

 

Si es así, click sobre el botón OK.

 

 

Código

 

import org.eclipse.swt.*;

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.layout.*;

 

 

public static void main(String[]
args) {

                        Display
display = new Display();

 

                        Shell shell
= new Shell(display);

                       
shell.setText(«HelloWorld»);

 

                        FillLayout
layout = new FillLayout();

                        layout.type
= SWT.VERTICAL;

                       
shell.setLayout(layout);

 

                        Label label
= new Label(shell, SWT.CENTER);

                       
label.setText(«Hola Mundo»);

   

                        shell.open();

                        while (!shell.isDisposed())

                                  
if (!display.readAndDispatch()) display.sleep();

            }

 

 

Como veis no nos vamos a complicar mucho la vida,
nuestra clase tendrá un main desde el cual vamos a crear un Ventana la cual
tendrá como nombre HelloWorld, dentro de esta creamos una etiqueta en el
centro de la ventana que mostrará el mensaje “Hola Mundo”.

 

Añadimos los import a nuestra clase y dentro de la
clase añadimos el resto del código, deberá quedar así:

 

package com;

import org.eclipse.swt.*;

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.layout.*;

 

public class HelloWorld {

 

            public static void
main(String[] args) {

                                  
Display display = new Display();

             

                                  
Shell shell = new Shell(display);

                                  
shell.setText(«HelloWorld»);

             

                                  
FillLayout layout = new FillLayout();

                                  
layout.type = SWT.VERTICAL;

                                  
shell.setLayout(layout);

 

                                  
Label label = new Label(shell, SWT.CENTER);

                                  
label.setText(«Hola Mundo»);

               

                                  
shell.open();

                                  
while (!shell.isDisposed())


                                               if (!display.readAndDispatch())
display.sleep();

                        }

 

}

 

 

 

Ejecución

 

Si ahora ejecutáramos esta clase, se produciría el
siguiente error:

 

 

 

 

Windows -  Linux

 

En este momento es donde hay que indicarle a la máquina
virtual donde está la librería que va hacer de puente entre el swt y el
sistema operativo. En el caso de Windows es una dll en el caso de Linux el
archivo con extensión .so.

En el caso de Windows cuando nos descargamos las
librerías swt, podemos encontrar la dll en:

 

org.eclipse.swt.win32_2.1.0\os\win32\

 

Dependiendo de nuestra configuración Linux puede ser:

 

GTK:

org.eclipse.swt.gtk_2.1.0/os/linux/86

 

MOTIF:

 

org.eclipse.swt.motif_2.1.0/os/linux/86

 

En mi caso he desempaquetado en el directorio /usr/eclipse/eclipse/plugins/temp.

Lo que hay que hacer ahora es indicarle a la máquina
virtual donde se encuentran o bien la dll o bien el .so , esto se puede
hacer de varias formas, incluyéndolo en el path o en el momento de la
llamada a la máquina virtual pasárselo como parámetro.

Nosotros vamos a elegir esto último.

 

En eclipse en la ventana del RUN, vamos a indicarle que
argumentos le vamos a pasar a la máquina virtual:

-Djava.library.path=Ruta donde se encuentren la dll o
el .so

 

En mi caso: -Djava.library.path=/usr/eclipse/eclipse/plugins/temp

 

Paso a paso:

 

Teniendo seleccionada nuestra clase en el Package
Explorer, menú RUN -> RUN -> Java Application –> NEW

Se mostrará una ventana parecida a esta:

 

 

 

 

 

Hacemos click en el tab
(x)= Arguments y en el text de VM arguments tecleamos:

-Djava.library.path=Ruta dll o .so.

 

En mi caso: -Djjava.library.path=/usr/eclipse/eclipse/plugins/temp.

 

 

 

 

Aplicamos los cambios y click sobre el botón RUN.

 

 

Dependiendo del sistema, el aspecto de la ventana
cambiara un poco, pero este será el resultado más o menos:

 

 

 

 

Este mismo código ejecutado en Windows XP tiene este
aspecto:

 

 

 

 

Conclusión

 

Gracias a SWT y con un poco de configuración podremos
hacer interfaces en java sin preocuparnos del sistema operativo en el que
correrá.

 

 

 

Dejar respuesta

Please enter your comment!
Please enter your name here