Está en la página 1de 44

TPROG 2011

Qu es Swing? (1)
Swing es la tecnologa propuesta por Java para la

construccin de interfaces grficas ricas.


Swing es un paquete conteniendo un conjunto de

controles y elementos grficos como botones, listas, etiquetas, etc.


Permite construir interfaces grficas para aplicaciones

de escritorio capaces de ser ejecutadas en diferentes plataformas (al igual que el propio lenguaje Java).
Swing es parte de Java Foundation Classes (JFC).
2

Qu es Swing? (2)
Paquetes: Swing est implementado en 18 paquetes (packages). Los paquetes ms utilizados son:

javax.swing javax.swing.events

Por ms informacin sobre los paquetes y clases de Swing: http://java.sun.com/docs/books/tutorial/ uiswing/TOC.html


Swing utiliza (hereda de) AWT (Abstract Window

Toolkit) una versin primitiva para manejo de interfaces grficas en Java.


3

Caractersticas de Swing (1)


Swing contiene una gran cantidad de controles para

entrada y salida de datos que comparten muchas semejanzas con otras interfaces grficas.
Sin embargo, existen algunas caractersticas que: Contienen ciertas particularidades en Swing, y Son utilizadas por muchos controles de Swing. Por tanto el correcto entendimiento de ellas es

fundamental para la comprensin de Swing.

Caractersticas de Swing (2)


Las que se profundizarn en el curso son: Jerarquas de componentes Swing Uso de layout managers Manejo de eventos Uso de models Uso de look&feel Estas caractersticas se irn introduciendo junto con

otros conceptos bsicos de Swing.

Componentes de Swing (1)


Jerarquas de Componentes Swing:
Contenedores de Alto Nivel (top-level containers):

Son los contenedores de ms alto nivel y son la raz de la jerarqua de componentes compuesta por contenedores intermedios y componentes bsicos. Son contenedores que pueden tener otros contenedores intermedios y/o componentes bsicos. Son los controles elementales para entrada y salida de datos a los usuarios finales.
6

Contenedores Intermedios (intermediate containers):

Componentes Bsicos (basic components):

Componentes de Swing (2)


Contenedores de Alto Nivel: Algunos top-level containers:

JFrame: ventana con ttulo, borde y contenido. JDialog: subventana independiente (cuadro de dilogo).

Para visualizar un control Swing en pantalla, debe

pertenecer a alguna jerarqua de contenedores (cuya raz ser un top-level container). Cada top-level container tiene un content-pane que contendr todos los componentes visibles.

Componentes de Swing (3)


Contenedores de Alto Nivel (cont.): Opcionalmente un top-level puede incluir una barra de mens (menu bar). La barra de men no est contenida en el content-pane.

Componentes de Swing (4)


Contenedores Intermedios: Algunos Intermediate Containers:

JPanel: contenedor de componentes. JScrollPane: proporciona barras de desplazamiento alrededor de un componente. JSplitPane: permite al usuario cambiar el tamao relativo de dos componentes. JInternalFrame: ventana dentro de otra ventana.

Componentes de Swing (5)


Agregar un Componente al content-pane: Un componente/control debe instanciarse antes de ser agregado al content-pane para poder ser visto. Ejemplo:
... JLabel etiqueta = new JLabel(Hola Mundo!); ventana.getContentPane().add(etiqueta); ...

Tambin se puede cambiar el content-pane mediante el

mtodo setContentPane()
10

Layout Managers (1)


Un layout manager es un objeto que implementa la

interfaz LayoutManager y determina el tamao y posicin de los componentes dentro de un contenedor. Realiza el layout (tamao y ubicacin) automtico de los elementos que se agregan al contenedor al cual el layout manager controla. Existen mltiples formas preexistentes de layout managers as como la posibilidad de no utilizar ningn layout manager (llamado absolute layout). Tambin Ud. puede crearse su propio layout manager o utilizar algunos ms complejos preexistentes.
11

Layout Managers (2)


Importante: si bien cada componente puede dar pistas

(hints) sobre su tamao y ubicacin, ser el layout manager quien tendr la ltima palabra sobre la ubicacin y tamao final del componente en el contenedor. En la prctica, a los componentes que se les manejar su layout sern JPanel y content-pane Los layout managers ms sencillos son: BorderLayout (por defecto para content-pane y JDialog), FlowLayout (por defecto para JPanel), BoxLayout y GridLayout
12

Layout Managers (3)


BorderLayout:
Utiliza cinco zonas para colocar los Componentes sobre ellas:

Norte, Sur, Este, Oeste y Centro.

13

Layout Managers (4)


FlowLayout:
Acomoda los componentes de izquierda a derecha. En el caso que se termine la pantalla contina colocndolos

hacia abajo.

14

Layout Managers (5)


BoxLayout:
Es similar al FlowLayout, pero permite adems la colocacin

de los componentes en forma vertical. Su constructor necesita el objeto contenedor y la direccin en que se ordenarn los componentes, pudiendo ser:

BoxLayout.X_AXIS direccin horizontal BoxLayout.Y_AXIS direccin vertical

15

Layout Managers (6)


GridLayout:
Acomoda los componentes en forma de matriz (cuadrcula)

cuyas celdas son todas del mismo tamao. Su constructor requiere la cantidad de columnas y filas.

16

Layout Managers (7)


GridBagLayout:
Acomoda los componentes en forma de matriz (cuadrcula)

cuyas celdas pueden ser de diferente tamao. Es uno de los ms complejos de utilizar.

17

Manejo de Eventos (1)


Un evento ocurre cada vez que el usuario interacta con

componentes de la interfaz grfica.


Se dice que el evento es disparado por Swing y el

programador, si le interesa hacer algo debido a la ocurrencia del evento, debe manejarlo.
Similar al manejo de excepciones, con la diferencia que

un evento no manejado no provoca la interrupcin en la ejecucin del programa.


Manejar un evento significa asociar un cdigo para que

se ejecute cuando el evento se dispara.


18

Manejo de Eventos (2)


Un evento es entonces un objeto que es creado y

disparado por Swing, conteniendo informacin sobre dicho evento. Ejemplo:


Cuando el usuario cliquea sobre un botn se dispara un

evento (un objeto de tipo ActionEvent) conteniendo, por ejemplo, cuantos clics se hicieron. El programador debe codificar un mtodo (llamado manejador del evento) con el cdigo a ejecutar. Ese mtodo ser invocado por Swing enviando ese objeto como parmetro.
19

Manejo de Eventos (3)


Resumen de Elementos Involucrados: El componente Swing con el cual el cliente interacta (en este caso: el botn). El objeto que representa el evento (conteniendo informacin). El mtodo (del programador) que es invocado debido a la ocurrencia del evento. Pero: Dnde se encuentra ese mtodo? (es decir el manejador del evento) R: En alguna clase que el programador decida.
20

Manejo de Eventos (4)


El mecanismo de control de eventos en Java est

basado en el patrn de diseo Observer. Los componentes grficos de interaccin con el usuario como campos de texto, botones, menes y dems componentes juegan el papel de subjects, mientras que las clases que implementan las interfaces de control de eventos juegan el papel de observers.

21

Manejo de Eventos (5)


Usuario
1) cliquea

event listeners interesado1 (Deposito) evento (ActionEvent) event object interesado2 (Deposito)

boton (JButton) event source

2) dispara

public class Deposito implements ActionListener


22

Manejo de Eventos (6)


Inner Classes: Es una clase dentro de otra clase. Permite implementar en forma rpida y directa una interfaz. Tiene acceso a todos los miembros de su clase anfitriona, incluyendo los miembros privados. Simplemente se define class dentro de otra clase. Inner Classes Annimas: son inner classes que no reciben un nombre y simplifican el cdigo pues se define en el mismo lugar en donde se necesita.
23

Manejo de Eventos (7)


Inner Classes Annimas en Swing: Se definen en el momento de registrar una instancia de la inner class a cierto evento. Se instancian a partir de una interfaz (por lo que deben implementarla completamente). Ejemplo:
boton.addActionListener(new ActionListener() { public void ActionPerformed(ActionEvent evt) { // manejar el evento... } });
24

Manejo de Eventos (8)


Entonces existen varias alternativas donde colocar el

manejador del evento clic sobre un botn:

1. 2. 3. 4.

Colocarlo en la clase Main (Versin 1). Colocarlo en el formulario (Versin 2). Colocarlo en una inner class (Versin 3). Colocarlo en una clase independiente (que no sea ni Program ni el formulario). Por ejemplo: la clase Deposito mencionada anteriormente.

25

Jerarqua de Botones Swing (*)


JC om ponent

AbstractB utton

JB ut ton

JMenuItem

JT oggle Button

JMenu

JC he ckB oxM enuIte m JC he ckB ox JR adioB utton

JR adioB uttonMenuIt em

(*) http://java.sun.com/docs/books/tutorial/uiswing/components/button.html
26

Algunos Componentes Swing


Tipos de Botones (subclases de AbstractButton): JButton JCheckBox JRadioButton Componentes para E/S de Texto: JLabel JTextField JTextArea JScrollPane Componentes para navegabilidad: JFileChooser

27

Uso de Models (1)


Casi la totalidad de los componentes Swing poseen

un model, aunque tpicamente el programador no necesite saber de l.


Los models ms tiles para el programador son

colecciones de elementos que sern mostrados por uno o varios componentes Swing (ej: una lista).
El uso de models permite separar la nocin de

mostrar una coleccin de elementos (ej: mediante un JList) de la coleccin de elementos en s (el model).
28

Uso de Models (2)


Los models le permiten al programador manejar, por

un lado, una coleccin con elementos a ser mostrados, y por otro, los controles Swing que mostrarn esos datos.
Tpicamente se utilizan con los siguientes

componentes Swing:
JComboBox (lista desplegable) JList (lista) JTable (tabla)
29

Uso de Menes (1)


Los menes se pueden mostrar en una barra de menes

(JMenuBar) o dentro de un pop-up (JPopupMenu).


Recordar:
JC om ponent

AbstractB utton

JB ut ton

JMenuItem

JT oggle Button

JMenu

JC he ckB oxM enuIte m JC he ckB ox JR adioB utton

JR adioB uttonMenuIt em
30

Uso de Menes (2)


Los menes pueden contener distintos elementos:

31

Uso de Menes (3)


Para crear una barra de menes:
Crear la barra (JMenuBar) y agregarla al frame. Crear un men (JMenu) y agregarlo a la barra. Crear un elemento de men y agregarlo al men:

un texto y/o imagen (JMenuItem).


una casilla de verificacin (JCheckBoxMenuItem). un boton radial (JRadioButtonMenuItem).

un sub-men (JMenu).
un separador (JSeparator).
32

Uso de Internal Frames (1)


Los internal frames permite desplegar ventanas dentro

de ventanas.
Un internal frame es un objeto instancia de la clase

JInternalFrame.
Para ser desplegado debe ser agregado a un desktop

pane y ste seteado como content pane al JFrame que lo contendr.


Se utilizan en conjunto con los menes.

33

Uso de Internal Frames (2)

34

Uso de Internal Frames (3)


Para mostrar un internal frame:
Crear una instancia de JDesktopPane y asignarlo

como el nuevo content pane de un JFrame.


Crear una instancia de JInternalFrame y agregarla al

JDesktopPane.
Hacer visible al internal frame (pack() y setVisible(boolean)) y asignarle un tamao (setSize(int,int)) y ubicacin (setLocation(int,int)).

35

Uso de Look and Feel (1)


Swing permite que el programador modifique la

apariencia de los controles (ms precisamente de los JComponent).


Esto se logra mediante la utilizacin de diferentes look

and feels, cada uno brindando una apariencia diferente para cada uno de los controles Swing.
Cada plataforma (sistema operativo) provee un look and

feel por defecto denominado SystemLookAndFeel.


Java provee su propio look&feel denominado

CrossPlatformLookAndFeel (tambin llamado Java L&F o Metal L&F).


36

Uso de Look and Feel (2)


Si se desea cambiar el look&feel, esto debe ser lo primero

a ejecutar, antes de desplegar cualqueir componente.


Para cambiar el look&feel programticamente se utiliza

la clase UIManager (esta clase maneja el look&feel, y es consultada por todos los componentes al momento de desplegarse):
void IUManager.setLookAndFeel(...)

Pasando como parmetro el look&feel que se desea

establecer:
UIManager.getCrossPlatformLookAndFeelClassName() IUManager.getSystemLookAndFeelClassName()

o
37

Uso de Look and Feel (3)


Dado que la sentencia anterior carga la clase del

look&feel a partir del nombre de dicha clase, sta podra no existir, con lo que el mtodo setLookAndFeel() podr lanzar una ClassNotFoundException que debe ser controlada.
Existen otras 4 excepciones que este mtodo puede

lanzar, por lo que suele ser suficiente (y aconsejable) capturar una sola excepcin de tipo Exception salvo que al programador le interese controlar alguno de los 5 tipos de excepciones en particular.
38

Ejemplos (1)

39

Ejemplos (2)
Este ejemplo muestra:

Layout fijo y look&feel por defecto.


Men para el acceso a los casos de uso. Botones para cerrar/minimizar la GUI.

Uso de internal frames para opciones de men.


Uso de dilogos para mostrar la ocurrencia de

errores/excepciones (no se ve en la imagen)

40

Ejemplos (3)

41

Ejemplos (4)
Este segundo ejemplo muestra:

Un internal frame dentro del frame principal.


Botones de Aceptar/Cancelar. Uso de imgenes (JFileChooser).

Componentes varios de E/S de datos, incluyendo

componentes ms avanzados (slider).

42

Ejemplos (5)
Elementos extra (opcionales):

Uso de layout managers.


Uso de componentes arborescentes (JTree). Splash screen al inicio.

Uso explcito de models.

43

Referencias
Java 6 SE API:
http://java.sun.com/javase/6/docs/api/

Swing Tutorial:
http://java.sun.com/docs/books/tutorial/uiswing/TOC.html

44