Publicado el 14 de Enero del 2017
1.403 visualizaciones desde el 14 de Enero del 2017
1,1 MB
29 paginas
Creado hace 15a (16/11/2009)
Programación orientada a objetos:
Lenguajes, Metodologías y Herramientas
Master de computación
Desarrollo de interfaces gráficas de usuario
usando SWT
(Standard Widget Toolkit)
José M. Drake y Patricia López
Computadores y Tiempo Real
Santander, 2009
1
Interfaces gráficas: Programación dirigida por eventos
Una GUI constituye un ejemplo de programa dirigido por eventos:
el programa sólo realiza acciones en respuesta a las órdenes recibidas por el usuario
las órdenes se envían a través de las interacciones del usuario con la interfaz
Santander, 2009
SWT
J.M. Drake y P. López
2
1
Recursos para desarrollo de GUIs en Java
AWT – Abstract Windows Toolkit
Tiene una arquitectura muy simple y consiste en una capa que permite el
acceso desde Java de los recursos gráficos disponibles en el sistema
(Windows, Macintosh, Linux, etc.)
Swing – Introducidas con las Java FoundationClasses
Son componente puramente Java y crean un aspecto que es
independiente del sistema que queda por debajo.
SWT - Standard Widget Toolkit
Ha sido introducido con la plataforma Eclipse y es una capa muy fina
que proporciona acceso a los elementos nativos. Se basa en la definición
de una interfaz muy sencilla y común para todos los sistemas
JFACE
Ha sido introducido con la plataforma Eclipse y proporciona recursos
para llevar a cabo las tareas comunes del desarrollo de GUIs. Es útil
cuando se desarrollan GUIs complejas
Santander, 2009
SWT
J.M. Drake y P. López
3
Incorporar la librería SWT a un proyecto Java en Eclipse
Pulse el botón derecho sobre el proyecto y seleccione Build Path >
Configure Build Path
Seleccione la pestaña Libraries y pulse el botón Add Library.
Seleccione la librería SWT pulse Next y OK para finalizar añadiendo
las librerías SWT a su proyecto.
Santander, 2009
SWT
J.M. Drake y P. López
4
2
Ejemplo HelloWorld
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Hello World");
shell.setBounds(100, 100, 200, 200);
shell.setLayout(new FillLayout());
Label label = new Label(shell, SWT.CENTER);
label.setText("Hola Mundo");
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
01 public class Helloword {
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16 }
}
display.dispose();
}
Santander, 2009
SWT
J.M. Drake y P. López
5
Estructura de una GUI desarrollada con SWT
Los objetos de la clase Display representan el enlace entre la aplicación SWT y el gestor de
ventanas del sistema operativo
No son visibles
Existe un único elemento Display por cada aplicación
Los objetos de la clase Shell representan ventanas visibles dentro de la GUI a través de las que
se interacciona con el usuario
Actúa como parent o contenedor de los elementos (Widgets) que forman la GUI.
Gestiona los desplazamientos y cambios de tamaño.
Existe siempre una ventana principal, que se asocia en su creación al Display que la gestiona
Widget es la clase raíz de todos los elementos gráficos que se pueden utilizar en una GUI SWT
Todos los widgets se crean asociados al elemento que pertenecen
Pueden existir ventanas secundarias o diálogos, que se asocian a otras ventanas
La creación de cualquier GUI en SWT se inicia siempre:
Display display = new Display();
Shell shellPrincipal = new Shell(display);
Santander, 2009
SWT
J.M. Drake y P. López
6
3
Clase Display
Constructor:
Display()
Cuando se requiera invocar el objeto Display se puede obtener por los métodos:
getCurrent() Retorna el display asociado al thread (línea de flujo) actual, o null si no
hay ninguno asociado a dicho thread.
getdefault() Retorna el display por defecto, que es el primero que se creo en el
sistema. Si no existe ninguno, se crea uno.
Otros métodos de interés ofrecidos por la clase Display son:
close() Cierra la conexión entre la GUI y el sistema operativo.
dispose(): Libera los recursos del sistema asociados al display
getActiveShell() Retorna la ventana activa.
getShells() Retorna un array con todas las ventanas disponibles asociadas al display.
getCursorControl() Retorna el elemento de la GUI sobre el que está situado el cursor.
getCursorLocation() Retorna la posición del cursor respecto a la esquina superior
izquierda de la pantalla
getFocusControl() Retorna el elemento que se encuentra enfocado.
getSystemColor(int) Retorna un color estándar por su índice.
getSystemFont() Retorna el tipo de letra establecido por defecto.
Santander, 2009
SWT
J.M. Drake y P. López
7
Clase Shell
Constructor:
Shell (Display display) : Crea una ventana asociada al correspondiente
display (ventana de primer nivel).
Shell
secundaria).
(Shell shell)
: Crea una ventana asociada a otra (ventana
Métodos contenidos en su API son:
close() Cierra la ventana (como cuando se cierra con el ratón).
dispose(): Libera los recursos del sistema asociados al display
getdisplay() Retorna el display que soporta a la ventana.
getShells() Retorna el array con todas las ventanas definidas en ella.
isEnabled() Retorna True si la ventana está habilitada.
open() Construye la ventana para que se haga visible y admita interacciones.
setActive() Pasa la ventana a primer plano
setEnabled(boolean enabled) Habilita/deshabilita la ventana para que reciba
eventos.
setVisible(boolean visible) Haz visible/novisible la ventana.
Santander, 2009
SWT
J.M. Drake y P. López
8
4
Gestión de eventos en una GUI
La interacción entre la GUI y el sistema operativo está dirigida por eventos (los
generados por interacción con los elementos de la GUI).
El thread de la GUI (el que crea el Display) es el único que puede crear o modificar
elementos de control. Si lo hace otro thread, se lanza la excepción SWTException.
El thread de la GUI permanece a la espera de la llegada de eventos, los atiende y
vuelve de nuevo a situación de espera
while (!shell.isDisposed()) {
if
(!display.readAndDispatch())
display.sleep();
}
The GUI Thread
Has the shell been disposed?
yes
no
Reads and dispatches events
Are there events
for dispatching?
yes
no
sleeps
Disposes the display
and exits.
Santander, 2009
SWT
J.M. Drake y P. López
9
Interacción con threads externos
Display ofrece tres procedimientos para que threads externos deleguen en el
thread de la GUI el acceso a un control:
asyncExec(Runnable) Causes the run() method of the runnable to be invoked by
the GUI thread at the next reasonable opportunity.
syncExec(Runnable) Causes the run() method of the runnable to be invoked by
the GUI thread at the next reasonable opportunity. The invoking thread is
suspended until the runnable completes.
timerExec(int, Runnable) Causes the run() method of the runnable to be invoked
by the GUI thread after the specified number of milliseconds have elapsed.
public class MyThread extends Thread {
final Button theButton;
final Display theDisplay;
public MyThread(Button b, Display d) {
theButton = b;
theDisplay = d;
}
public void run(){
theDisplay.asyncExec(new Runnable(){
public void run(){ theButton.setText(“Hola”);}
}
};
Santander, 2009
SWT
J.M. Drake y P. López
10
5
Jerarquía de los elementos de control
En el árbol de la derecha se muestra
la jerarquía de los elementos que se
proporcionan en la librería SWT
Todos los elementos descienden de
alguna
clases
abstractas:
estas
de
tres
Widget: Es el antecesor de todos los
objetos que se pueden añadir a una GUI
SWT.
Control: Es el antecesor de todos los
elementos visibles que se pueden incluir
en una GUI SWT.
Scrollable: Es el antecesor de todos los
elementos que pueden ser muy grandes,
y por tanto pueden incorporar bandas
laterales de desplazamiento
Santander, 2009
SWT
J.M. Drake y P. López
11
Clase Control
La clase Control, de la que heredan todos los elementos, es la que tiene los
métodos generales más importantes. Algunos métodos interesantes son:
getdisplay() Retorna el display con el que interacciona con el sistema.
getParent() Retorna el elemento dentro del que se ha declarado.
getShell() Retorna el shell dentro de que se encuentra declarado.
isEnabled() Retorna True si el elemento está habilitado para la interacción.
isVisible() Retorna True si es visible en la ventana.
setBackground(Color) Establece el color de fondo.
setBounds(Rectangle) Establece el tamaño y la posición del elemento de control.
setEnabled(boolean) Habilita el elemento para que admita interacción.
setVisible(boolean) Haz que aparezca visible o no el elemento de control.
boolean setFocus() Enfoca el elemento de control para que reciba los eventos del
teclado.
setFont(Font) Establece el tipo de letra.
setLayoutData(Object) Establece los datos que definen la política de distribución de
elementos dentro de él.
setSize(Point) Establece el tamaño del elemento de control.
Santander, 2009
SWT
J.M. Drake y P. López
12
6
Clase Label
Control estático que muestra texto o imágenes no modificables
Constructor:
Label (Composite parent, int style)
Estilos que son útiles cuando se crea son:
SWT.SHADOW_IN Creates an inse
Comentarios de: Programación orientada a objetos: Lenguajes, Metodologías y Herramientas - Desarrollo de interfaces gráficas de usuario usando SWT (0)
No hay comentarios