Sei sulla pagina 1di 35

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Indice
1. Introduccin o 2. Crear una ventana 3. Componentes swing 3.1. JPanel y JLabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. ImageIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. JTextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4. JTextArea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5. JButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6. JCheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7. JRadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 5 6 7 7 8 8 9 9

3.8. ButtonGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.9. JComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.10. JList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.11. JTable y JScrollPane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.12. JTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.13. JMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4. Organizacin de los componentes o 16

4.1. BorderLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2. FlowLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.3. GridLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.4. CardLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.5. GridBagLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5. Tratamiento de eventos 5.1. MouseListener 5.3. WindowListener 19

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.2. KeyListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.4. ActionListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.5. TextListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.6. ItemListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

1.

Introduccin o

En esta sesin se van a ver algunos aspectos de JFC (Java Foundation Classes). JFC es un conjunto o de componentes para trabajo con interfaces grcas de usuario en Java. a Contiene: Abstract Window Toolkit (AWT)

API para el diseo de interfaces grcas de usuario que se integran en el sistema de ventanas nativo del sistema n a donde se ejecutan, incluyendo APIs para arrastrar y soltar.

Java 2D Ir al ndice
juan.gutierrez@uv.es

Pgina: 1 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

APIs para trabajar con grcos 2D, trabajo con imgenes, texto e impresin. a a o

Swing

APIs que extienden AWT para proporcionar una biblioteca de componentes para el diseo de interfaces grcas de n a usuario enteramente realizadas en Java.

Accesibilidad

APIs para permitir que las aplicaciones sean accesibles a las personas con discapacidades.

Internacionalizacin o

Todas estas APIs incluyen soporte para crear aplicaciones que puedan ser utilizadas independientemente de la localizacin del usuario. o

Aqu vamos a ver algo de Swing y de AWT. A grandes rasgos, los pasos para crear una interfaz grca de usuario son a Crear una ventana Colocar componentes en la ventana Organizar los componentes en los contenedores Tratar los eventos

2.

Crear una ventana


Se puede crear una ventana (que servir como contenedor de componentes) utilizando la clase a

JFrame.

El siguiente cdigo muestra cmo se puede crear una ventana con tamao 300 por 200 pixels. o o n Ir al ndice
juan.gutierrez@uv.es

Pgina: 2 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

i m p o r t j a v a x . swing . ; p u b l i c c l a s s EjemploVentana { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Ventana ven = new Ventana ( ) ; ven . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE) ; ven . show ( ) ; } } c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { setSize (300 ,200) ; } }

El resultado al ejecutar esta aplicacin es el siguiente: o

Si se desea que en la ventana aparezca un t tulo se puede poner como primera sentencia en el constructor de Ventana la siguiente instruccin: o
s u p e r ( Ventana ) ;

En este caso se ver lo siguiente: a

Las ventanas son contenedores de otros componentes tales como barras de men, campos de texto, u botones, etc. De hecho una ventana est constituida por una serie de capas: a

Ir al ndice

juan.gutierrez@uv.es

Pgina: 3 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

JFrame JRoot JLayeredPane Content pane Glass pane

Para aadir componentes a la ventana, primero se debe obtener el contenedor content pane y a n continuacin aadir los componentes a ste. o n e Por ejemplo, supongamos que deseamos dibujar un rectngulo en la ventana. El rectngulo no se a a puede dibujar directamente sobre un objeto del tipo JFrame. En su lugar procederemos del siguiente modo:

1. Crearemos una clase que extienda a JPanel 2. Sobreescribiremos su mtodo paintComponent(Graphics g) e 3. Aadiremos un objeto de este tipo a la ventana. n

El cdigo se muestra a continuacin: o o


i m p o r t j a v a x . swing . ; i m p o r t j a v a . awt . ; c l a s s MiPanel e x t e n d s JPanel { p u b l i c v o i d paintComponent ( G r a p h i c s g ) { s u p e r . paintComponent ( g ) ; g . drawRect ( 2 0 , 2 0 , 8 0 , 8 0 ) ; } } c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { getContentPane ( ) . add ( new MiPanel ( ) ) ; setSize (300 ,200) ; } }

p u b l i c c l a s s EjemploVentana2 { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Ventana ven = new Ventana ( ) ;

Ir al ndice

juan.gutierrez@uv.es

Pgina: 4 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

ven . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE) ; ven . show ( ) ; } }

Se ha sobreescrito un mtodo de la clase JPanel donde especicamos qu se debe realizar cuando e e haya que mostrar este componente, pero... donde llamamos a este mtodo?. e La respuesta es: en ningn sitio. Este mtodo es llamado automticamente cada vez que hay que u e a pintar el componente y esto ocurre cada vez que:

Cuando hay que mostrarlo por primera vez Cuando se modica el tamao de la ventana n Cuando la ventana estaba minimizada y se vuelve a mostrar. Cuando otra aplicacin que cubre a la ventana se mueve. o ...

3.

Componentes swing

Un componente es un objeto que tiene una representacin grca y que puede ser mostrado por o a pantalla y que puede utilizado por el usuario. Ejemplos de componentes son: JButton, JTextField, JScrollPane, JTextArea, 1 Utilizan como base la clase java.awt.Component que est denida como abstracta. Todos los compoa nentes (excepto los mens) extienden a esta clase. u Los componentes se pueden dividir en dos categor as: Un conjunto de componentes est formado por widgets 2 . a Otro conjunto est formado por contenedores. Estos componentes extienden a la clase java.awt.Container a (que es una clase abstracta que extiende a Component). Los contenedores son componentes que pueden incluir otros componentes. La siguiente gura muestra la relacin entre componentes y contenedores o
Hay otra serie de clases que no empiezan por J: Button, TextField, TextArea,... que pertenecen a AWT. Contraccin de Window y gadget. Una representacin visible de un componente que puede ser manipulada por el o o usuario. Botones, campos de texto y barras de desplazamiento son ejemplos de widgets
2 1

Ir al ndice

juan.gutierrez@uv.es

Pgina: 5 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Contenedor alto nivel


JFrame JApplet

Contenedor intermedio
JPanel JScrollPane

} }} }} }} }}

...

...

PPP PPP PPP AA PPP AA PPP AA PPP AA PPP A PP Contenedor PPPP Componentes intermedio
JPanel JScrollPane JButton JTextField

...

...

...

Componentes
JButton JTextField

Componentes

...

JButton JTextField

...

...

Vamos a ver algunos de los componentes que ofrece Swing.

3.1.

JPanel y JLabel

Un objeto de la clase JPanel sirve para contener otros componentes. La clase JLabel se utiliza para crear etiquetas de texto.

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; JPanel p = new JPanel ( ) ; p . add ( new J L a b e l ( Ejemplo de JPanel ) ) ; c . add ( p ) ; setSize (200 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 6 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

3.2.

ImageIcon

Objetos de esta clase se pueden utilizar para mostrar imgenes. a

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( S t r i n g f i c h ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; ImageIcon i i = new ImageIcon ( f i c h ) ; c . add ( new J L a b e l ( , i i , J L a b e l .CENTER) ) ; setSize (650 ,500) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( a r g s [ 0 ] ) ; } }

3.3.

JTextField

Objetos de esta clase se utilizan para que el usuario pueda introducir datos a la aplicacin. o

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; J T e x t F i e l d campoTexto = new J T e x t F i e l d ( 2 0 ) ; c . add ( new J L a b e l ( Nombre ) ) ; c . add ( campoTexto ) ; setSize (350 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 7 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

3.4.

JTextArea

Objetos de esta clase se utilizan para que el usuario pueda introducir datos tipo texto de gran tamao. n

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; JTextArea a r e a = new JTextArea ( 8 , 2 0 ) ; c . add ( new J L a b e l ( O b s e r v a c i o n e s ) ) ; c . add ( a r e a ) ; setSize (350 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

3.5.

JButton

Un objeto de esta clase representa un botn. o

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; JButton b1 = new JButton ( Aceptar ) ; JButton b2 = new JButton ( C a n c e l a r ) ; c . add ( b1 ) ; c . add ( b2 ) ; setSize (350 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 8 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

3.6.

JCheckBox

Sirve para seleccionar elementos.

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; JCheckBox cb = new JCheckBox ( P i z a r r a ) ; cb . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 2 0 ) ) ; c . add ( cb ) ; setSize (200 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

3.7.

JRadioButton

Sirve para seleccionar elementos.

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; JRadioButton rb=new JRadioButton ( P i z a r r a ) ; rb . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 2 0 ) ) ; c . add ( rb ) ; setSize (200 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 9 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

3.8.

ButtonGroup

Se pueden agrupar una serie de JRadioButton de forma que slo pueda estar seleccionado uno de o ellos.
i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; c . add ( new J L a b e l ( S e l e c c i o n a e l t i p o de c o m b u s t i b l e ) ) ; Font f u e n t e = new Font ( A r i a l , Font . PLAIN , 1 8 ) ; JRadioButton g a s = new JRadioButton ( G a s o l i n a ) ; gas . setFont ( fuente ) ; JRadioButton d i e = new JRadioButton ( D i e s e l ) ; die . setFont ( fuente ) ; // Agrupamos l o s b o t o n e s ButtonGroup grupo = new ButtonGroup ( ) ; grupo . add ( g a s ) ; grupo . add ( d i e ) ; JPanel r a d i o P a n e l = new JPanel ( ) ; r a d i o P a n e l . s e t L a y o u t ( new GridLayout ( 0 , 1 ) ) ; r a d i o P a n e l . add ( g a s ) ; r a d i o P a n e l . add ( d i e ) ; c . add ( r a d i o P a n e l ) ; setSize (300 ,300) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 10 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

3.9.

JComboBox

Sirve para mostrar una lista desplegable de elementos.

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; JComboBox cb = new JComboBox ( ) ; cb . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 2 0 ) ) ; cb . addItem ( P i z a r r a ) ; cb . addItem ( P a n t a l l a ) ; cb . addItem ( P r o y e c t o r ) ; c . add ( cb ) ; setSize (200 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

3.10.

JList

Objetos de esta clase sirven para mostrar una lista con elementos.

Ir al ndice

juan.gutierrez@uv.es

Pgina: 11 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . e v e n t . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new FlowLayout ( ) ) ; String [ ] datos = { Pizarra , Pantalla , Proyector }; J L i s t l i s t a = new J L i s t ( d a t o s ) ; c . add ( l i s t a ) ; setSize (200 ,200) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

3.11.

JTable y JScrollPane

Objetos del tipo JTable sirven para mostrar informacin en forma tabular. o Los objetos del tipo JScrollPane sirven para contener componentes y mostrar barras de desplazamiento.
i m p o r t j a v a x . swing . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r cp = getContentPane ( ) ; cp . s e t L a y o u t ( new BorderLayout ( ) ) ; // Nombres de l a s columnas f i n a l S t r i n g [ ] nombreCol = { S e s i o n , Tema , Fecha , Aula } ; // Datos Object [ ] [ ] datos = { { 1 , MySQL , 120704 , 5 } , { 2 , MySQL , 130704 , 5 } , { 3 , JDBC , 140704 , 5 } , { 4 , GUI , 150704 , 5 } , { 5 , P r o y e c t o , 160704 , 5 } } ; JTable t a b l a = new JTable ( d at os , nombreCol ) ; t a b l a . s e t F o n t ( new Font ( A r i a l , Font .BOLD, 1 8 ) ) ; t a b l a . setRowHeight ( 2 4 ) ; J S c r o l l P a n e j s p = new J S c r o l l P a n e ( t a b l a ) ; // , ver , hor ) ; cp . add ( j s p , BorderLayout .CENTER) ; setSize (500 ,300) ; setVisible ( true ) ;

Ir al ndice

juan.gutierrez@uv.es

Pgina: 12 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

} p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ejercicio 1 Realizar una consulta en la que se muestren las familias del Reino Unido donde el precio de estancia por d sea menor o igual a 18 euros, se debe seleccionar el nombre de la familia, la a ciudad y el tipo de casa. El resultado se debe mostrar en una JTable.

3.12.

JTree

Objetos de este tipo sirven para mostrar la informacin en forma de rbol. o a

i m p o r t j a v a x . swing . ; i m p o r t j a v a x . swing . t r e e . ; i m p o r t j a v a . awt . ; p u b l i c c l a s s Ventana e x t e n d s JFrame{ p r i v a t e JTree a r b o l ; p u b l i c Ventana ( ) {

C o n t a i n e r c = getContentPane ( ) ; c . s e t L a y o u t ( new BorderLayout ( ) ) ; // C o n s t r u c c i o n d e l a r b o l DefaultMutableTreeNode a s i g = new DefaultMutableTreeNode ( E n l a c e s ) ; DefaultMutableTreeNode tema = n u l l ; DefaultMutableTreeNode s e c c i o n = n u l l ; tema = new DefaultMutableTreeNode ( B u s c a d o r e s ) ; a s i g . add ( tema ) ; s e c c i o n = new DefaultMutableTreeNode ( Google ) ;

Ir al ndice

juan.gutierrez@uv.es

Pgina: 13 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

tema . add ( s e c c i o n ) ; s e c c i o n = new DefaultMutableTreeNode ( Yahoo ) ; tema . add ( s e c c i o n ) ;

tema = new DefaultMutableTreeNode ( Java ) ; a s i g . add ( tema ) ; s e c c i o n = new DefaultMutableTreeNode ( Sun ) ; tema . add ( s e c c i o n ) ; s e c c i o n = new DefaultMutableTreeNode ( IBM ) ; tema . add ( s e c c i o n ) ; s e c c i o n = new DefaultMutableTreeNode ( JavaWorld ) ; tema . add ( s e c c i o n ) ;

a r b o l = new JTree ( a s i g ) ; a r b o l . s e t F o n t ( new Font ( A r i a l , Font .BOLD, 2 0 ) ) ; c . add ( a r b o l , BorderLayout .CENTER) ; setSize (400 ,600) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 14 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

3.13.

JMenu

i m p o r t j a v a . awt . ; i m p o r t j a v a x . swing . ; c l a s s Ventana e x t e n d s JFrame{ p r i v a t e JMenuBar mb ; Ventana ( ) { // Se c r e a una b a r r a de men s u mb = new JMenuBar ( ) ; // Creamos un e l e m e n t o d e l men u JMenu a r c h i v o = new JMenu ( Ar c hi v o ) ; a r c h i v o . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 2 0 ) ) ; // Creamos y a adimos submen s n u JMenuItem nuevo = new JMenuItem ( Nuevo ) ; nuevo . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; a r c h i v o . add ( nuevo ) ; JMenuItem a b r i r = new JMenuItem ( A b r i r ) ; a b r i r . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; a r c h i v o . add ( a b r i r ) ; JMenuItem v e r = new JMenuItem ( Ver t o d o s ) ; v e r . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; a r c h i v o . add ( v e r ) ; // Ahora a adimos a r c h i v o a l a b a r r a de menus n mb . add ( a r c h i v o ) ; // Creamos o t r o e l e m e n t o d e l men u JMenu e d i t a r = new JMenu ( E d i t a r ) ; e d i t a r . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 2 0 ) ) ; // Creamos y a adimos submen s n u JMenuItem c o p i a r = new JMenuItem ( C op ia r ) ; c o p i a r . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; e d i t a r . add ( c o p i a r ) ; JMenuItem p e g a r = new JMenuItem ( Pegar ) ; p e g a r . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; e d i t a r . add ( p e g a r ) ; JMenuItem c o r t a r = new JMenuItem ( C o r t a r ) ; c o r t a r . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; e d i t a r . add ( c o r t a r ) ; // A adimos e d i t a r a l a b a r r a de menu n mb . add ( e d i t a r ) ;

setJMenuBar (mb) ; setSize (500 ,500) ; setVisible ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new Ventana ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 15 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

4.

Organizacin de los componentes o


Cuando en una ventana hay muchos componentes hay que organizarlos de algn modo. u

Java proporciona diversos esquemas de organizacin (layout managers) que pueden ser utilizados o para organizar los componentes dentro de los contenedores. Los gestores de organizacin se encargan de reorganizar los componentes en caso de que el usuario o cambie el tamao de la ventana. n Los gestores de organizacin que ofrece Java son: o
BorderLayout, FlowLayout, BoxLayout, CardLayout, GridLayout, GridBagLayout

El procedimiento es siempre el mismo, se crea un objeto de alguna de estas clases y se le indica al contenedor que organice los componentes utilizando el objeto (para ello los contenedores disponen del mtodo setLayout(LayoutManager m). e

4.1.

BorderLayout

Se puede utilizar para colocar en un contenedor cinco componentes como mximo ya que propora ciona cinco posiciones donde colocar los componentes, estas son: NORTH (arriba), SOUTH (abajo), WEST (izquierda), EAST (derecha) y CENTER (en el centro).

Ir al ndice

juan.gutierrez@uv.es

Pgina: 16 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

i m p o r t j a v a . awt . ; i m p o r t j a v a x . swing . ; c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; JButton JButton JButton JButton JButton b1 b2 b3 b4 b5 = = = = = new new new new new JButton ( A ) ; JButton ( B ) ; JButton ( C ) ; JButton ( D ) ; JButton ( E ) ;

c . s e t L a y o u t ( new BorderLayout ( ) ) ; c . add ( b1 , BorderLayout .NORTH) ; c . add ( b2 , BorderLayout .SOUTH) ; c . add ( b3 , BorderLayout .WEST) ; c . add ( b4 , BorderLayout . EAST) ; c . add ( b5 , BorderLayout .CENTER) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Ventana v = new Ventana ( ) ; v . setSize (300 ,300) ; v . show ( ) ; } }

4.2.

FlowLayout

Coloca los componentes de izquierda a derecha conforme se van aadiendo a la ventana. El tamao n n de los componentes se ajusta a su contenido.

Ir al ndice

juan.gutierrez@uv.es

Pgina: 17 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

i m p o r t j a v a . awt . ; i m p o r t j a v a x . swing . ; c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; JButton JButton JButton JButton JButton b1 b2 b3 b4 b5 = = = = = new new new new new JButton ( A ) ; JButton ( B ) ; JButton ( Bot n ms l a r g o ) ; o a JButton ( D ) ; JButton ( E ) ;

c . s e t L a y o u t ( new FlowLayout ( ) ) ; c . add ( b1 ) ; c . add ( b2 ) ; c . add ( b3 ) ; c . add ( b4 ) ; c . add ( b5 ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Ventana v = new Ventana ( ) ; v . setSize (200 ,200) ; v . show ( ) ; } }

4.3.

GridLayout

Coloca los componentes en las y columnas en funcin de los valores pasados al constructor. Todas o las celdas tendrn el mismo tamao. a n

i m p o r t j a v a . awt . ; i m p o r t j a v a x . swing . ; c l a s s Ventana e x t e n d s JFrame{ p u b l i c Ventana ( ) { C o n t a i n e r c = getContentPane ( ) ; JButton b1 = new JButton ( A ) ; JButton b2 = new JButton ( B ) ; JButton b3 = new JButton ( C ) ; JButton b4 = new JButton ( D ) ; JButton b5 = new JButton ( E ) ; c . s e t L a y o u t ( new GridLayout ( 2 , 3 ) ) ; c . add ( b1 ) ; c . add ( b2 ) ; c . add ( b3 ) ; c . add ( b4 ) ; c . add ( b5 ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Ventana v = new Ventana ( ) ; v . setSize (300 ,300) ; v . show ( ) ; } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 18 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

4.4.

CardLayout

Se puede utilizar para mostrar de forma condicional unos elementos u otros, de forma que se puede controlar qu elementos sern visibles. Una ilustracin es una pila de cartas en las que slo la superior e a o o es visible en un instante dado.

4.5.

GridBagLayout

Este es un organizador complejo que permite ajustar la posicin de los componentes. Al colocar o los componentes en los contenedores se especican las restricciones que se deben cumplir ( posicin o del componente, anchura y altura del componente, separacin entre los componentes, posicin dentro o o del espacio que ocupa, ...). Ejercicio 2 Se pide construir la interfaz grca que se muestra en la siguiente gura. a

5.

Tratamiento de eventos

Hasta ahora las interfaces grcas que se han mostrado tienen poca utilidad ya que no responden a a las acciones del usuario. Qu ocurre si pulsamos sobre un botn? e o Qu ocurre si pulsamos sobre una celda de la tabla? e Qu ocurre si pulsamos sobre un elemento de un men? e u Pues con lo que hemos hecho hasta ahora, aparentemente no sucede nada, no se obtiene ninguna respuesta.

Ir al ndice

juan.gutierrez@uv.es

Pgina: 19 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

El botn es una fuente de eventos o

En una GUI colocamos una serie de componentes entre los cuales se encuentra un JButton. Este componente es una fuente de eventos de ratn. o

1 El usuario pulsa el ratn sobre el botn o o

2 Se lanza un evento del tipo MouseEvent

Si el usuario pulsa con el ratn sobre el botn se lanza un evento del tipo MouseEvent. Si no hay ningn o o u objeto que recoja ese evento no sucede nada.

Qu es lo que falta? e Falta especicar qu es lo que se debe realizar cuando se produzcan determinados eventos sobre e los componentes que se coloquen en la ventana. Esta tarea es la que se conoce como tratamiento de eventos. Cualquier sistema operativo que soporte GUIs monitoriza los eventos que se producen, como por ejemplo pulsaciones sobre las teclas o pulsaciones con un botn del ratn. o o El sistema operativo informa sobre estos eventos a los programas que estn en ejecucin. a o Cada programa decide qu hacer (si es que debe hacer algo) en respuesta a estos eventos. e En Java se utiliza un modelo conocido como modelo de delegacin de eventos. s o El modelo de delegacin de eventos se basa en que los componentes disparan eventos que pueden o ser tratados por escuchadores (o manipuladores).

Ir al ndice

juan.gutierrez@uv.es

Pgina: 20 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Los escuchadores se registran en un componente. Por ejemplo, en un botn podemos registrar un o escuchador de eventos de ratn. o Una vez que el escuchador ha sido aadido al componente, cuando se produzca un evento, los n mtodos apropiados del manipulador (que han sido especicados en la interfaz) sern llamados. e a

El botn es una fuente de eventos o

1 Registramos un oyente de eventos de ratn o asociado al botn o

En una GUI colocamos una serie de componentes entre los cuales se encuentra un JButton. Este componente es una fuente de eventos de ratn. Ahora registramos un oyente de eventos de ratn en el o o botn. o

2 El usuario pulsa el ratn sobre el botn o o

3 Se lanza un evento del tipo MouseEvent

4 El oyente recibe la noticacin o del evento

Si el usuario pulsa con el ratn sobre el botn se lanza un evento del tipo MouseEvent. Los oyentes que o o se hayan registrados son noticados de que se ha producido un evento.

La clase EventObject del paquete java.util es la clase padre de todos los eventos. Su constructor recibe una referencia al objeto que genera el evento. Esta clase tiene dos mtodos: getSource() que devuelve el objeto que gener el evento y toString(). e o Los paquetes relacionados con los eventos en AWT son java.awt.event. La clase abstracta AWTEvent denida en el paquete java.awt es una subclase de EventObject. Ir al ndice
juan.gutierrez@uv.es

Pgina: 21 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Es la superclase de todos los eventos basados en AWT utilizados por el modelo de delegacin de o eventos. Hay dos clases de eventos: Eventos de componente o de bajo nivel ocurren cuando ocurre algo espec co en un componente. Por ejemplo al moverse, entrar o salir el ratn sobre un componente, al o ganar o perder la atencin,... o Eventos semnticos no son tan espec a cos como los anteriores y no son disparados necesariamente por una accin atmica tal y como una pulsacin del ratn. Las acciones o o o o que disparan estos eventos depende del objeto: por ejemplo en una lista se disparan cuando sus elementos son pulsados dos veces, en un campo de texto se disparan cuando se pulsa la tecla enter. Los eventos de componente o de bajo nivel son:
ComponentEvent, ContainerEvent, FocusEvent, InputEvent, KeyEvent, MouseEvent, MouseWheelEvent y WindowEvent

Los eventos semnticos son: a


ActionEvent ,AdjustmentEvent , ItemEvent, TextEvent

A continuacin se muestran los eventos que se denen en AWT y cual es la accin que los produce o o Eventos AWT ActionEvent Descripcin o Se genera cuando el usuario pulsa un botn, pulsa Return en un campo o de texto, selecciona un elemento de un men o cuando un elemento de u una lista se pulsado 2 veces. Se genera cuando se manipula una barra de deslizamiento. Evento que indica que un elemento de una lista se ha seleccionado o ha dejado de estar seleccionado. Los siguientes componentes generan eventos de este tipo: CheckBox, CheckBoxMenuItem, Choice, List. Se genera cuando se cambia el valor de un rea de texto o de un campo a de texto. Los objetos fuente de este evento son: TextField y TextArea.

AdjustmentEvent ItemEvent

TextEvent

Ir al ndice

juan.gutierrez@uv.es

Pgina: 22 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Eventos AWT ComponentEvent

ContainerEvent FocusEvent

Descripcin o Un evento que indica que un componente ha sido movido, ha cambiado de tamao o ha sido ocultado. AWT maneja este evento (es decir que n aunque expl citamente tratemos este evento, AWT tambin lo har). e a Se genera cuando se aade o se elimina un componente de un contenen dor. AWT trata este evento. Se genera cuando un componente gana o pierde la atencin. Un como ponente tiene la atencin al pulsar sobre l con el ratn o por que se ha o e o llegado a l pulsando la tecla de tabulacin. El componente que tiene e o la atencin recibe los eventos de teclado. o

Eventos AWT KeyEvent MouseEvent MouseWheelEvent WindowEvent

Descripcin o Es una subclase de InputEvent. Se genera cuando se pulsa una tecla o libera una tecla. Es una subclase de InputEvent. Se genera cuando el ratn se mueve, o se pulsa, se arrastra, o cuando entra o sale el ratn de un componente. o Un evento que indica que la rueda del ratn se ha movido en un como ponente. Se genera cuando una ventana se activa, se desactiva, se cierra, se minimiza se maximiza o se sale de ella.

La jerarqu de estas clases se muestra en el siguiente diagrama: a


EventObject

ContainerEvent

CC QQQQ lll x CC QQQ lll xx QQQ CC lll xxxx l QQQ CC lll x x ll QQQ CC x ll QQQ CC xx lll x ll QQQ l CC x QQQ lll xx CC x QQQ lll C xx lll ComponentEvent AdjustmentEvent ActionEvent ItemEvent TextEvent ll5 x< O aCChPPPPP CC P lll xxx CC PPPP lll x CC PPP lll xxx lll PPP CC x ll PPP xx CC lll PPP ll xx CC l PPP xx lll CC ll PPP xx CC ll PPP xx lll C ll xx <<abstract>>
FocusEvent

<<abstract>> ; O aC 5 AWTEvent hQ

KeyEvent

< xx xx x xx xx x xx xx x xx xx

InputEvent

aCC CC CC CC CC CC CC CC CC

PaintEvent

WindowEvent

MouseEvent

Ir al ndice

juan.gutierrez@uv.es

Pgina: 23 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Vamos a ver ahora algunas de las interfaces que se ofrecen en java.awt con el n de especicar los mtodos que deben poseer los objetos oyentes o auditores para cada uno de los eventos. e

5.1.

MouseListener

p u b l i c i n t e r f a c e MouseListener extends EventListener

Esta interfaz la deben implementar aquellas clases que estn interesadas en escuchar eventos del e tipo MouseEvent El objeto de esta clase debe registrarse en un componente utilizando su mtodo addMouseListener. e Los mtodos que dene esta interfaz son: e
// Metodo l l a m a d o cuando s e p u l s a y l i b e r a un b o t o n d e l r a t o n // s o b r e un componente v o i d mou seClicked ( MouseEvent e ) // Metodo l l a m a d o cuando e l r a t o n e n t r a en un componente v o i d mouseEntered ( MouseEvent e ) // Metodo l l a m a d o cuando e l r a t o n s a l e de un componente v o i d mouseExited ( MouseEvent e ) // Metodo l l a m a d o a l p u l s a r un b o t o n d e l r a t o n s o b r e un componente v o i d mousePressed ( MouseEvent e ) // Metodo l l a m a d o a l l i b e r a r un b o t o n d e l r a t o n s o b r e un componente v o i d mouseReleased ( MouseEvent e )

En el siguiente ejemplo se trata el evento: el usuario ha pulsado con el ratn sobre el botn. Lo que o o se realiza en el manipulador del evento es obtener lo que el usuario haya escrito en el campo de texto y mostrarlo por la salida estndar. a
i m p o r t j a v a . awt . e v e n t . ; i m p o r t j a v a . awt . ; i m p o r t j a v a x . swing . ; c l a s s EventosRaton e x t e n d s JFrame{ p r i v a t e JButton boton ; p r i v a t e J T e x t F i e l d campoTexto ; p u b l i c EventosRaton ( ) { c l a s s ManipulaMouseEvent i m p l e m e n t s M o u s e L i s t e n e r { p u b l i c v o i d mouseEntered ( MouseEvent e ) { } p u b l i c v o i d mouseExited ( MouseEvent e ) { } p u b l i c v o i d mou seClicked ( MouseEvent e ) {} p u b l i c v o i d mouseReleased ( MouseEvent e ) {} p u b l i c v o i d mousePressed ( MouseEvent e ) { System . out . p r i n t l n ( campoTexto . g e t T e x t ( ) ) ; } } C o n t a i n e r cp = getContentPane ( ) ; cp . s e t L a y o u t ( new FlowLayout ( ) ) ;

Ir al ndice

juan.gutierrez@uv.es

Pgina: 24 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

cp . add ( new J L a b e l ( I n t r o d u c e p r e c i o : ) ) ; campoTexto = new J T e x t F i e l d ( 2 0 ) ; cp . add ( campoTexto ) ; boton = new JButton ( Aceptar ) ; cp . add ( boton ) ; boton . a d d M o u s e L i s t e n e r ( new ManipulaMouseEvent ( ) ) ; setSize (500 ,300) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { EventosRaton ven = new EventosRaton ( ) ; ven . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE) ; ven . show ( ) ; } }

A continuacin se muestra un ejemplo en el que se realiza una consulta a la base de datos utilizando o un dato introducido por el usuario en un campo de texto. La consulta a la base de datos es la del ejercicio 2 de la sesin de JDBC pero ahora se utiliza un o
PreparedStatement.
import import import import j a v a . awt . e v e n t . ; j a v a . awt . ; j a v a x . swing . ; java . s q l . ;

/ C l a s e de apoyo . En e l l a encapsulamos l a c o n e x i o n a l a b a s e de d a t o s y las consultas / c l a s s Consultas { p r i v a t e C o n n e c t i o n con ; p r i v a t e P r e p a r e d S t a t e m e n t ps ; // C o n s t r u c t o r Consultas () { S t r i n g u r l = j d b c : mysql : / / l o c a l h o s t : 3 3 0 6 / e s t a n c i a s ? u s e r=u s u a r i o&password=c l a v e ; try { C l a s s . forName ( com . mysql . j d b c . D r i v e r ) ; con = DriverManager . g e t C o n n e c t i o n ( u r l ) ; ps = con . p r e p a r e S t a t e m e n t ( s e l e c t f a m i l i a s . NombreF , c a s a s . Ciudad , c a s a s . Tipo from f a m i l i a s , c a s a s where ( f a m i l i a s . IdCasa=c a s a s . IdCasa ) and ( c a s a s . p r e c i o H a b D i a <= ?) ) ; } c a t c h ( SQLException ex ) { ex . p r i n t S t a c k T r a c e ( ) ; } c a t c h ( ClassNotFoundException ex ) { ex . p r i n t S t a c k T r a c e ( ) ; } } / Metodo que r e a l i z a una c o n s u l t a a l a b a s e de d a t o s y d e v u e l v e un e l R e s u l t S e t con e l r e s u l t a d o . @param v a l o r un f l o a t n e c e s a r i o para c o n s t r u i r l a c o n s u l t a

Ir al ndice

juan.gutierrez@uv.es

Pgina: 25 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

@return un o b j e t o d e l t i p o R e s u l t S e t con e l r e s u l t a d o de l a c o n s u l t a / public ResultSet consultaCasas ( f l o a t valor ) { ResultSet resultado = n u l l ; try { ps . s e t F l o a t ( 1 , v a l o r ) ; r e s u l t a d o = ps . e x e c u t e Q u e r y ( ) ; } c a t c h ( SQLException ex ) { ex . p r i n t S t a c k T r a c e ( ) ; } return resultado ; } / Metodo para c e r r a r l a c o n e x i o n con l a b a s e de d a t o s / public void cierraConexion () { try { con . c l o s e ( ) ; } c a t c h ( SQLException ex ) { ex . p r i n t S t a c k T r a c e ( ) ; } } }

/ Esta e s l a v e n t a n a / c l a s s ConsultaGUI e x t e n d s JFrame{ p r i v a t e JButton boton ; p r i v a t e J T e x t F i e l d campoTexto ; p r i v a t e C o n s u l t a s c o n s = new C o n s u l t a s ( ) ; p u b l i c ConsultaGUI ( ) { // Creamos una c l a s e para manipular e v e n t o s de r a t o n c l a s s ManipulaMouseEvent i m p l e m e n t s M o u s e L i s t e n e r { p u b l i c v o i d mouseEntered ( MouseEvent e ) { } p u b l i c v o i d mouseExited ( MouseEvent e ) { } p u b l i c v o i d mou seClicked ( MouseEvent e ) {} p u b l i c v o i d mouseReleased ( MouseEvent e ) {} p u b l i c v o i d mousePressed ( MouseEvent e ) { S t r i n g parametro = campoTexto . g e t T e x t ( ) ; try { f l o a t p r e c i o = F l o a t . p a r s e F l o a t ( parametro ) ; System . out . p r i n t l n ( \n R e s u l t a d o de l a busqueda : ) ; ResultSet r = cons . consultaCasas ( p r e c i o ) ; r . beforeFirst () ; w h i l e ( r . next ( ) ) { System . out . p r i n t ( F a m i l i a : + r . g e t S t r i n g ( 1 ) + \ t ) ; System . out . p r i n t ( Ciudad : + r . g e t S t r i n g ( 2 ) + \ t ) ; System . out . p r i n t ( Tipo : + r . g e t S t r i n g ( 3 ) + \n ) ; } } c a t c h ( NumberFormatException ex ) { System . out . p r i n t l n ( No e s un n mero v a l i d o ) ; u } c a t c h ( SQLException ex ) { ex . p r i n t S t a c k T r a c e ( ) ; } } }

Ir al ndice

juan.gutierrez@uv.es

Pgina: 26 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

// Se o b t i e n e e l c o n t e n t pane de l a v e n t a n a C o n t a i n e r cp = getContentPane ( ) ; // Indicamos l a forma de o r g a n i z a r l o s componentes en e l // c o n t e n t pane cp . s e t L a y o u t ( new FlowLayout ( ) ) ; // Se a n ade una e t i q u e t a de t e x t o cp . add ( new J L a b e l ( I n t r o d u c e p r e c i o : ) ) ; // Se c r e a y a n ade un campo de t e x t o campoTexto = new J T e x t F i e l d ( 2 0 ) ; cp . add ( campoTexto ) ; // Se c r e a y a n ade un b o t o n boton = new JButton ( Aceptar ) ; cp . add ( boton ) ; // R e g i s t r a m o s un o b j e t o de ManipulaMouseEvent como un e s c u c h a d o r // de e v e n t o s de r a t o n para e l b o t o n boton . a d d M o u s e L i s t e n e r ( new ManipulaMouseEvent ( ) ) ; setSize (500 ,300) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { ConsultaGUI ven = new ConsultaGUI ( ) ; ven . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE) ; ven . show ( ) ; } }

Ejercicio 3 En una de las tablas se pod introducir comentarios de los clientes sobre las casas. Se desea an realizar una GUI para realizar buscar por una palabra (o palabras) dentro del comentario. La GUI debe contener una etiqueta, un campo de texto donde introducir la(s) palabra(s) y un botn. El o resultado de esta bsqueda sern las casas que tienen un comentario que incluya la(s) palabra(s) u a introducidas. Este resultado se inserta en un JComboBox de forma que el usuario pueda seleccionar una casa. A su lado aparecer un botn para lanzar una bsqueda concreta para ver todos los comentarios a o u concernientes a la casa seleccionada. Los comentarios deben aparecer en un rea de texto. a La siguiente gura muestra un posible diseo y su ejecucin. n o

Ir al ndice

juan.gutierrez@uv.es

Pgina: 27 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

5.2.

KeyListener

p u b l i c i n t e r f a c e KeyListener extends EventListener

Esta interfaz la deben implementar aquellas clases que estn interesadas en escuchar eventos del e tipo KeyEvent El objeto de esta clase debe registrarse en un componente utilizando su mtodo addKeyListener. e Los mtodos que dene esta interfaz son: e
// Metodo l l a m a d o cuando s e p u l s a una t e c l a v o i d k e y P r e s s e d ( KeyEvent e ) // Metodo l l a m a d o cuando s e l i b e r a una t e c l a v o i d k e y R e l e a s e d ( KeyEvent e ) // Metodo l l a m a d o cuando s e p u l s a y l i b e r a una t e c l a v o i d keyTyped ( KeyEvent e )

En el siguiente ejemplo, cada vez que se pulsa una tecla sobre un rea de texto se trata el evento a que se lanza. Se realiza una estad stica para comprobar el nmero de letras y nmeros frente al uso u u de otras teclas.
import import import import j a v a . awt . ; j a v a . awt . e v e n t . ; j a v a x . swing . ; java . u t i l . Calendar ;

c l a s s E v e n t o s T e c l a d o e x t e n d s JFrame{ p r i v a t e JTextArea a ; p r i v a t e i n t c o n t a d o r L e t r a s =0; p r i v a t e i n t c o n t a d o r O t r o s =0; p r i v a t e long t1 ; p r i v a t e long t2 ; EventosTeclado ( ) { a = new JTextArea ( ) ; c l a s s ManipulaKeyEvent i m p l e m e n t s K e y L i s t e n e r { p u b l i c v o i d k e y P r e s s e d ( KeyEvent e ) { char car ; c a r = e . getKeyChar ( ) ; i f ( ! ( Character . i s L e t t e r ( car ) ) & ! ( Character . i s D i g i t ( car ) ) ) { S t r i n g t e c l a = e . getKeyText ( e . getKeyCode ( ) ) ; i f ( t e c l a . compareTo ( R e t r o c e s o ) ==0) c o n t a d o r L e t r a s ; System . out . p r i n t ( t e c l a ) ; c o n t a d o r O t r o s ++; } } p u b l i c v o i d k e y R e l e a s e d ( KeyEvent e ) { } p u b l i c v o i d keyTyped ( KeyEvent e ) { char car ; c a r = e . getKeyChar ( ) ; i f ( ( Character . i s L e t t e r ( car ) ) | ( Character . i s D i g i t ( car ) ) ) { System . out . p r i n t ( c a r ) ;

Ir al ndice

juan.gutierrez@uv.es

Pgina: 28 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

c o n t a d o r L e t r a s ++; } } } c l a s s ManipulaMouseEventInicio implements MouseListener { p u b l i c v o i d mouseEntered ( MouseEvent e ) { } p u b l i c v o i d mouseExited ( MouseEvent e ) { } p u b l i c v o i d mou seClicked ( MouseEvent e ) {} p u b l i c v o i d mouseReleased ( MouseEvent e ) {} p u b l i c v o i d mousePressed ( MouseEvent e ) { c o n t a d o r L e t r a s =0; c o n t a d o r O t r o s =0; t1 = Calendar . g e t I n s t a n c e ( ) . g e t T i m e I n M i l l i s ( ) ; } } c l a s s ManipulaMouseEventFin i m p l e m e n t s M o u s e L i s t e n e r { p u b l i c v o i d mouseEntered ( MouseEvent e ) { } p u b l i c v o i d mouseExited ( MouseEvent e ) { } p u b l i c v o i d mou seClicked ( MouseEvent e ) {} p u b l i c v o i d mouseReleased ( MouseEvent e ) {} p u b l i c v o i d mousePressed ( MouseEvent e ) { a . setText ( ) ; t2 = Calendar . g e t I n s t a n c e ( ) . g e t T i m e I n M i l l i s ( ) ; l o n g tiempo = t2t 1 ; System . out . p r i n t l n ( \ n L e t r a s y numeros : + c o n t a d o r L e t r a s ) ; System . out . p r i n t l n ( Otras t e c l a s : + c o n t a d o r O t r o s ) ; System . out . p r i n t l n ( Tiempo ( m i l i s e g u n d o s ) : + tiempo ) ; } } ManipulaKeyEvent mce = new ManipulaKeyEvent ( ) ; a . a d d K e y L i s t e n e r ( mce ) ; getContentPane ( ) . add ( a , BorderLayout .CENTER) ; JButton b o t o n I n i c i o = new JButton ( I n i c i o ) ; getContentPane ( ) . add ( b o t o n I n i c i o , BorderLayout .NORTH) ; b o t o n I n i c i o . a d d M o u s e L i s t e n e r ( new M a n i p u l a M o u s e E v e n t I n i c i o ( ) ) ; JButton botonFin = new JButton ( R e s u l t a d o ) ; botonFin . a d d M o u s e L i s t e n e r ( new ManipulaMouseEventFin ( ) ) ; getContentPane ( ) . add ( botonFin , BorderLayout .SOUTH) ; setSize (400 ,400) ; s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE) ; show ( ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new E v e n t o s T e c l a d o ( ) ; } }

5.3.

WindowListener

p u b l i c i n t e r f a c e WindowListener e x t e n d s E v e n t L i s t e n e r

Ir al ndice

juan.gutierrez@uv.es

Pgina: 29 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Esta interfaz la deben implementar aquellas clases que estn interesadas en escuchar eventos del e tipo WindowEvent El objeto de esta clase debe registrarse en un componente utilizando su mtodo addWindowListener. e Los mtodos que dene esta interfaz son: e
// Metodo l l a m a d o cuando s e a c t i v a l a v e n t a n a v o i d windowActivated ( WindowEvent e ) // Metodo l l a m a d o cuando s e ha c e r r a d o l a v e n t a n a v o i d windowClosed ( WindowEvent e ) // Metodo l l a m a d o cuando e l u s u a r i o c i e r r a l a v e n t a n a v o i d windowClosing ( WindowEvent e ) // Metodo l l a m a d o cuando l a v e n t a n a d e j a de e s t a r a c t i v a v o i d windowDeactivated ( WindowEvent e ) // Metodo l l a m a d o cuando l a v e n t a n a pasa de i c o n o a su e s t a d o normal v o i d w i n d o w D e i c o n i f i e d ( WindowEvent e ) // Metodo l l a m a d o cuando s e i c o n i f i c a l a v e n t a n a v o i d w i n d o w I c o n i f i e d ( WindowEvent e ) // Metodo l l a m a d o l a primera v e z que s e muestra l a v e n t a n a v o i d windowOpened ( WindowEvent e )

5.4.

ActionListener

p u b l i c i n t e r f a c e ActionListener extends EventListener

Esta interfaz la deben implementar aquellas clases que estn interesadas en escuchar eventos del e tipo ActionEvent El objeto de esta clase debe registrarse en un componente utilizando su mtodo addActionListener. e Los mtodos que dene esta interfaz son: e
// Metodo l l a m a d o cuando o c u r r e una a c c i o n v o i d a c t i o n P e r f o r m e d ( ActionEvent e )

i m p o r t j a v a . awt . ; i m p o r t j a v a . awt . e v e n t . ; i m p o r t j a v a x . swing . ; c l a s s E v e n t o s A c c i o n e x t e n d s JFrame i m p l e m e n t s A c t i o n L i s t e n e r { p r i v a t e T e x t F i e l d c1 ; p r i v a t e T e x t F i e l d c2 ; p r i v a t e Button b ; EventosAccion ( ) { // Se c r e a una b a r r a de men s u JMenuBar mb = new JMenuBar ( ) ;

Ir al ndice

juan.gutierrez@uv.es

Pgina: 30 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

// Creamos un e l e m e n t o d e l men u JMenu a r c h i v o = new JMenu ( A rc hi v o ) ; a r c h i v o . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 2 0 ) ) ; // Creamos y a adimos submen s n u JMenuItem nuevo = new JMenuItem ( Nuevo ) ; nuevo . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; nuevo . a d d A c t i o n L i s t e n e r ( t h i s ) ; a r c h i v o . add ( nuevo ) ;

JMenuItem a b r i r = new JMenuItem ( A b r i r ) ; a b r i r . s e t F o n t ( new Font ( A r i a l , Font . PLAIN , 1 6 ) ) ; abrir . addActionListener ( t h i s ) ; a r c h i v o . add ( a b r i r ) ; mb . add ( a r c h i v o ) ; setJMenuBar (mb) ; setSize (300 ,300) ; s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE) ; show ( ) ; } p u b l i c v o i d a c t i o n P e r f o r m e d ( ActionEvent e ) { // Comprobamos s i l a f u e n t e d e l e v e n t o e s un JMenuItem i f ( e . g e t S o u r c e ( ) i n s t a n c e o f JMenuItem ) { JMenuItem s o u r c e = ( JMenuItem ) ( e . g e t S o u r c e ( ) ) ; S t r i n g s e l e c c i o n a d o = source . getText ( ) ; // S i p u l s a s o b r e a b r i r mostramos una v e n t a n a para a b r i r f i c h e r o s i f ( s e l e c c i o n a d o . compareTo ( A b r i r ) ==0){ J F i l e C h o o s e r p i d e F i c h e r o = new J F i l e C h o o s e r ( ) ; i n t r e t u r n V a l = p i d e F i c h e r o . showOpenDialog ( E v e n t o s A c c i o n . t h i s ) ; i f ( r e t u r n V a l == J F i l e C h o o s e r .APPROVE OPTION) { System . out . p r i n t l n ( Has s e l e c c i o n a d o e l f i c h e r o : + p i d e F i c h e r o . g e t S e l e c t e d F i l e ( ) . getName ( ) ) ; } } } } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new E v e n t o s A c c i o n ( ) ; } }

5.5.

TextListener

p u b l i c i n t e r f a c e TextListener extends EventListener

Esta interfaz la deben implementar aquellas clases que estn interesadas en escuchar eventos del e tipo TextEvent El objeto de esta clase debe registrarse en un componente utilizando su mtodo addTextListener. e Los mtodos que dene esta interfaz son: e Ir al ndice
juan.gutierrez@uv.es

Pgina: 31 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

// Metodo l l a m a d o cuando e l t e x t o ha s i d o m o d i f i c a d o v o i d textValueChanged ( TextEvent e )

5.6.

ItemListener

p u b l i c i n t e r f a c e ItemListener extends EventListener

Esta interfaz la deben implementar aquellas clases que estn interesadas en escuchar eventos del e tipo ItemEvent El objeto de esta clase debe registrarse en un componente utilizando su mtodo addItemListener. e Los mtodos que dene esta interfaz son: e
// Metodo l l a m a d o cuando e l t e x t o ha s i d o m o d i f i c a d o v o i d itemStateChanged ( ItemEvent e )

i m p o r t j a v a . awt . ; i m p o r t j a v a . awt . e v e n t . ; i m p o r t j a v a x . swing . ; c l a s s EventosItem e x t e n d s JFrame{ p r i v a t e JCheckBox c h e c k ; p r i v a t e JComboBox comb ; p r i v a t e boolean s e l ; p r i v a t e String val1 ; c l a s s ManipulaMouseEvent i m p l e m e n t s M o u s e L i s t e n e r { p u b l i c v o i d mousePressed ( MouseEvent e ) { System . out . p r i n t l n ( s e l ) ; System . out . p r i n t l n ( v a l 1 ) ; } p u b l i c v o i d mouseReleased ( MouseEvent e ) {} p u b l i c v o i d mou seClicked ( MouseEvent e ) { } p u b l i c v o i d mouseEntered ( MouseEvent e ) { } p u b l i c v o i d mouseExited ( MouseEvent e ) { } } c l a s s ManipulaItemEvent i m p l e m e n t s I t e m L i s t e n e r { p u b l i c v o i d itemStateChanged ( ItemEvent e ) { i f ( e . g e t S o u r c e ( ) i n s t a n c e o f JCheckBox ) { i f ( e . g e t S t a t e C h a n g e ( ) == ItemEvent .SELECTED) sel =true ; else sel = false ; } e l s e // e s que l a f u e n t e e s e l JComboBox val1 = ( String ) e . getItem ( ) ; } } // El c o n s t r u c t o r EventosItem ( ) { C o n t a i n e r cp = getContentPane ( ) ;

Ir al ndice

juan.gutierrez@uv.es

Pgina: 32 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

c h e c k = new JCheckBox ( A ) ; comb = new JComboBox ( ) ; comb . addItem ( Casa ) ; comb . addItem ( P i s o ) ; comb . addItem ( Adosado ) ; JButton b = new JButton ( Aceptar ) ; c h e c k . a d d I t e m L i s t e n e r ( new ManipulaItemEvent ( ) ) ; comb . a d d I t e m L i s t e n e r ( new ManipulaItemEvent ( ) ) ; b . a d d M o u s e L i s t e n e r ( new ManipulaMouseEvent ( ) ) ; cp . s e t L a y o u t ( new FlowLayout ( ) ) ; cp . add ( c h e c k ) ; cp . add ( comb ) ; cp . add ( b ) ; setSize (400 ,400) ; s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE) ; show ( ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new EventosItem ( ) ; } }

Hay ocasiones en las que puede resultar incmodo trabajar con estas interfaces si uno est inteo a resado en implementar un unico mtodo, ya que hay que escribir el resto de los mtodos dejndolos e e a vac os. Para algunas de estas interfaces se ofrecen clases que las implementan pero dejando vac todos os los mtodos. e De esta forma, puede resultar ms cmodo extender estas clases que implementar las interfaces. a o

<<interface>>

XXXListener
O     

XXXAdapter

donde XXX es el tipo del evento. Las clases adaptadoras que se ofrecen son:

Ir al ndice

juan.gutierrez@uv.es

Pgina: 33 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

<<interface>>

<<interface>>

<<interface>>

ComponentListener O   ComponentAdapter

ContainerListener O   ContainerAdapter

FocusListener O   FocusAdapter

<<interface>>

<<interface>>

<<interface>>

KeyListener O   KeyAdapter

MouseListener O   MouseAdapter

MouseMotionListener O   MouseMotionAdapter

<<interface>>

WindowListener O   WindowAdapter

El cdigo de la derecha y el de la izquierda son equivalentes: o

Button b = new Button ( A c e p t a r ) ; class Oyente i m p l e m e n t e s M o u s e L i s t e n e r { void void void m o u s e C l i c k e d ( MouseEvent e ) { } mouseEntered ( MouseEvent e ) { }

Button b = new Button ( A c e p t a r ) ; class Oyente extends MouseAdapter {

public public public

p u b l i c v o i d m o u s e P r e s s e d ( MouseEvent e ) { System . o u t . p r i n t l n ( Boton p u l s a d o ) ; } }

m o u s e E x i t e d ( MouseEvent e ) { } b . a d d M o u s e L i s t e n e r ( new Oyente ( ) ) ;

p u b l i c v o i d m o u s e P r e s s e d ( MouseEvent e ) { System . o u t . p r i n t l n ( Boton p u l s a d o ) ; } public } b . a d d M o u s e L i s t e n e r ( new Oyente ( ) ) ; void m o u s e R e l e a s e d ( MouseEvent e ) { }

La unica diferencia a nivel de cdigo es que en el caso de la derecha la clase implementa a la interfaz o MouseListener y en el de la derecha la clase extiende a la clase MouseAdapter que a su vez implementa a la interfaz MouseListener. Cuando una clase oyente de eventos se va a utilizar en un punto muy espec co del cdigo y no se o va a reutilizar en otras partes (o en otras clases) existe la posibilidad de realizarla mediante una clase annima. o Una clase annima (como cabe esperar) es aquella a la que no se asigna un nombre. o La creacin del objeto y la especicacin de la clase se realiza en el mismo momento, el este caso o o en el argumento de un mtodo. e Vamos a ver cmo se puede utilizar una clase annima con el ejemplo anterior: o o

Ir al ndice

juan.gutierrez@uv.es

Pgina: 34 a

Interfaces Grcas de Usuario en Java a Julio 2004.

MySQL y Java Universitat de Val`ncia e

Button b = new Button ( Aceptar ) ; b . a d d M o u s e L i s t e n e r ( new MouseAdapter ( ) { p u b l i c v o i d mousePressed ( MouseEvent e ) { System . out . p r i n t l n ( Boton p u l s a d o ) ; } }

Debido a la duracin del curso se han quedado algunas sin ver como por ejemplo: o Pluggable Look and Feel. El patrn Model-View-Controller que utiliza Swing. o Unos cuantos componentes Swing. Algunos gestores de organizacin. o

Ir al ndice

juan.gutierrez@uv.es

Pgina: 35 a

Potrebbero piacerti anche