SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Interfaces Gr´ficas de Usuario en Java
                                                            a                                                            MySQL y Java
                                                             Julio 2004.                                        Universitat de Val`ncia
                                                                                                                                  e


´
Indice
1. Introducci´n
             o                                                                                                                                 1

2. Crear una ventana                                                                                                                           2

3. Componentes swing                                                                                                                           5
     3.1. JPanel y JLabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     6
     3.2. ImageIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     7
     3.3. JTextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    7
     3.4. JTextArea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     8
     3.5. JButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     8
     3.6. JCheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       9
     3.7. JRadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      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. Organizaci´n 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                                                                                                                      19
     5.1. MouseListener      . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
     5.2. KeyListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
     5.3. WindowListener       . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
     5.4. ActionListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
     5.5. TextListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
     5.6. ItemListener     . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32




1.       Introducci´n
                   o

   En esta sesi´n se van a ver algunos aspectos de JFC (Java Foundation Classes). JFC es un conjunto
               o
de componentes para trabajo con interfaces gr´ficas de usuario en Java.
                                               a


      Contiene:

               Abstract Window Toolkit (AWT)


               API para el dise˜o de interfaces gr´ficas 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                                                  P´gina: 1
                                                                                                                                    a
Interfaces Gr´ficas de Usuario en Java
                                                      a                                                          MySQL y Java
                                                       Julio 2004.                                      Universitat de Val`ncia
                                                                                                                          e


           APIs para trabajar con gr´ficos 2D, trabajo con im´genes, texto e impresi´n.
                                    a                       a                      o




           Swing


           APIs que extienden AWT para proporcionar una biblioteca de componentes para el dise˜o de interfaces gr´ficas de
                                                                                              n                  a
           usuario enteramente realizadas en Java.




           Accesibilidad


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




           Internacionalizaci´n
                             o


           Todas estas APIs incluyen soporte para crear aplicaciones que puedan ser utilizadas independientemente de la loca-
           lizaci´n del usuario.
                 o




     Aqu´ vamos a ver algo de Swing y de AWT.
        ı

     A grandes rasgos, los pasos para crear una interfaz gr´fica 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 c´digo muestra c´mo se puede crear una ventana con tama˜o 300 por 200 pixels.
                   o              o                                      n

Ir al ´
      ındice                                          juan.gutierrez@uv.es                                            P´gina: 2
                                                                                                                       a
Interfaces Gr´ficas de Usuario en Java
                                                              a                                        MySQL y Java
                                                               Julio 2004.                    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 aplicaci´n 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 instrucci´n:
                                             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                      P´gina: 3
                                                                                                            a
Interfaces Gr´ficas de Usuario en Java
                                                                a                                                     MySQL y Java
                                                                 Julio 2004.                                 Universitat de Val`ncia
                                                                                                                               e



                                                                                              JFrame

                                                                                            JRoot

                                                                                              JLayeredPane

                                                                                              Content pane

                                                                                          Glass pane




   Para a˜adir componentes a la ventana, primero se debe obtener el contenedor content pane y a
          n
continuaci´n a˜adir los componentes a ´ste.
          o n                         e

   Por ejemplo, supongamos que deseamos dibujar un rect´ngulo en la ventana. El rect´ngulo 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 m´todo paintComponent(Graphics g)
                           e

  3. A˜adiremos un objeto de este tipo a la ventana.
      n


     El c´digo se muestra a continuaci´n:
         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                                   P´gina: 4
                                                                                                                           a
Interfaces Gr´ficas de Usuario en Java
                                                              a                                       MySQL y Java
                                                               Julio 2004.                   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 m´todo de la clase JPanel donde especificamos qu´ se debe realizar cuando
                          e                                             e
haya que mostrar este componente, pero... ¿donde llamamos a este m´todo?.
                                                                   e

   La respuesta es: en ning´n sitio. Este m´todo es llamado autom´ticamente 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 modifica el tama˜o de la ventana
                                   n

          Cuando la ventana estaba minimizada y se vuelve a mostrar.

          Cuando otra aplicaci´n que cubre a la ventana se mueve.
                              o

          ...



3.        Componentes swing

    Un componente es un objeto que tiene una representaci´n gr´fica y que puede ser mostrado por
                                                            o   a
pantalla y que puede utilizado por el usuario. Ejemplos de componentes son: JButton, JTextField, JScro-
llPane, JTextArea, 1

   Utilizan como base la clase java.awt.Component que est´ definida como abstracta. Todos los compo-
                                                         a
nentes (excepto los men´s) 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 figura muestra la relaci´n entre componentes y contenedores
                                            o
    1
    Hay otra serie de clases que no empiezan por J: Button, TextField, TextArea,... que pertenecen a AWT.
    2
    Contracci´n de Window y gadget. Una representaci´n 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




Ir al ´
      ındice                                                    juan.gutierrez@uv.es                      P´gina: 5
                                                                                                           a
Interfaces Gr´ficas de Usuario en Java
                                                                   a                                           MySQL y Java
                                                                    Julio 2004.                       Universitat de Val`ncia
                                                                                                                        e



                                                        Contenedor
                                                        alto nivel
                                                          JFrame
                                                          JApplet        PPP
                                                                             PPP
                                                             ...         AA      PPP
                                                    }                      AA        PPP
                                                  }}                         AA         PPP
                                                }}                             AA          PPP
                                              }}                                 A            PPP
                                            }}                                                   PP
                       Contenedor                                                  Contenedor PPPP
                                                                                                    Componentes
                       intermedio                                                  intermedio
                                                             ...                                     JButton
                           JPanel                                                   JPanel
                                                                                                   JTextField
                        JScrollPane                                              JScrollPane
                                                                                                       ...
                                ...                                                       ...


                     Componentes                                               Componentes
                           JButton                           ...                    JButton
                         JTextField                                               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                            P´gina: 6
                                                                                                                    a
Interfaces Gr´ficas de Usuario en Java
                                                                   a                                   MySQL y Java
                                                                    Julio 2004.               Universitat de Val`ncia
                                                                                                                e


3.2.     ImageIcon

   Objetos de esta clase se pueden utilizar para mostrar im´genes.
                                                           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 aplicaci´n.
                                                                                             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                      P´gina: 7
                                                                                                            a
Interfaces Gr´ficas de Usuario en Java
                                                                   a                                   MySQL y Java
                                                                    Julio 2004.               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
tama˜o.
    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 bot´n.
                                            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                  P´gina: 8
                                                                                                            a
Interfaces Gr´ficas de Usuario en Java
                                                                   a                                   MySQL y Java
                                                                    Julio 2004.               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                      P´gina: 9
                                                                                                            a
Interfaces Gr´ficas de Usuario en Java
                                                                a                                                   MySQL y Java
                                                                 Julio 2004.                               Universitat de Val`ncia
                                                                                                                             e


3.8.       ButtonGroup

    Se pueden agrupar una serie de JRadioButton de forma que s´lo 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                               P´gina: 10
                                                                                                                        a
Interfaces Gr´ficas de Usuario en Java
                                                                   a                                   MySQL y Java
                                                                    Julio 2004.               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                     P´gina: 11
                                                                                                           a
Interfaces Gr´ficas de Usuario en Java
                                                                    a                                            MySQL y Java
                                                                     Julio 2004.                        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 informaci´n en forma tabular.
                                                          o

   Los objetos del tipo JScrollPane sirven para contener componentes y mostrar barras de desplaza-
miento.
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” , ”12−07−04” , ” 5 ” } ,
           { ” 2 ” , ”MySQL” , ”13−07−04” , ” 5 ” } ,
           { ” 3 ” , ”JDBC” , ”14−07−04” , ” 5 ” } ,
           { ” 4 ” , ”GUI” , ”15−07−04” , ” 5 ” } ,
           { ” 5 ” , ” P r o y e c t o ” , ”16−07−04” , ” 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                          P´gina: 12
                                                                                                                     a
Interfaces Gr´ficas de Usuario en Java
                                                                a                                    MySQL y Java
                                                                 Julio 2004.                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 informaci´n 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                 P´gina: 13
                                                                                                         a
Interfaces Gr´ficas de Usuario en Java
                                                               a                                   MySQL y Java
                                                                Julio 2004.               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                P´gina: 14
                                                                                                       a
Interfaces Gr´ficas de Usuario en Java
                                                                a                                       MySQL y Java
                                                                 Julio 2004.                   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                    P´gina: 15
                                                                                                            a
Interfaces Gr´ficas de Usuario en Java
                                                a                                          MySQL y Java
                                                 Julio 2004.                      Universitat de Val`ncia
                                                                                                    e




4.     Organizaci´n de los componentes
                 o

     Cuando en una ventana hay muchos componentes hay que organizarlos de alg´n modo.
                                                                             u

   Java proporciona diversos esquemas de organizaci´n (layout managers) que pueden ser utilizados
                                                    o
para organizar los componentes dentro de los contenedores.

   Los gestores de organizaci´n se encargan de reorganizar los componentes en caso de que el usuario
                             o
cambie el tama˜o de la ventana.
               n

     Los gestores de organizaci´n 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
m´todo setLayout(LayoutManager m).
  e


4.1.    BorderLayout

    Se puede utilizar para colocar en un contenedor cinco componentes como m´ximo ya que propor-
                                                                            a
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                            P´gina: 16
                                                                                               a
Interfaces Gr´ficas de Usuario en Java
                                                             a                                   MySQL y Java
                                                              Julio 2004.               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      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 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 a˜adiendo a la ventana. El tama˜o
                                                                   n                             n
de los componentes se ajusta a su contenido.




Ir al ´
      ındice                                                    juan.gutierrez@uv.es                P´gina: 17
                                                                                                     a
Interfaces Gr´ficas de Usuario en Java
                                                             a                                   MySQL y Java
                                                              Julio 2004.               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      b1   =   new   JButton ( ”A” ) ;
              JButton      b2   =   new   JButton ( ”B” ) ;
              JButton      b3   =   new   JButton ( ” Bot´ n m´s l a r g o ” ) ;
                                                          o   a
              JButton      b4   =   new   JButton ( ”D” ) ;
              JButton      b5   =   new   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 filas y columnas en funci´n de los valores pasados al constructor. Todas
                                                      o
las celdas tendr´n el mismo tama˜o.
                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                P´gina: 18
                                                                                                     a
Interfaces Gr´ficas de Usuario en Java
                                                 a                                           MySQL y Java
                                                  Julio 2004.                       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 ser´n visibles. Una ilustraci´n es una pila de cartas en las que s´lo la superior
             e              a                        o                                    o
es visible en un instante dado.


4.5.     GridBagLayout

    Este es un organizador complejo que permite ajustar la posici´n de los componentes. Al colocar
                                                                  o
los componentes en los contenedores se especifican las restricciones que se deben cumplir ( posici´n
                                                                                                 o
del componente, anchura y altura del componente, separaci´n entre los componentes, posici´n dentro
                                                          o                              o
del espacio que ocupa, ...).

       Ejercicio 2
       Se pide construir la interfaz gr´fica que se muestra en la siguiente figura.
                                       a




5.      Tratamiento de eventos

    Hasta ahora las interfaces gr´ficas que se han mostrado tienen poca utilidad ya que no responden
                                 a
a las acciones del usuario.

     ¿Qu´ ocurre si pulsamos sobre un bot´n?
        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                              P´gina: 19
                                                                                                 a
Interfaces Gr´ficas de Usuario en Java
                                                    a                                                          MySQL y Java
                                                     Julio 2004.                                      Universitat de Val`ncia
                                                                                                                        e




                                                                                        El bot´n es una fuente de eventos
                                                                                              o




           En una GUI colocamos una serie de componentes entre los cuales se encuentra un JButton. Este com-
           ponente es una fuente de eventos de rat´n.
                                                  o




                                                                                 1 El usuario pulsa el rat´n sobre el bot´n
                                                                                                          o              o




                                                                                 2 Se lanza un evento del tipo MouseEvent




           Si el usuario pulsa con el rat´n sobre el bot´n se lanza un evento del tipo MouseEvent. Si no hay ning´n
                                         o              o                                                        u
           objeto que recoja ese evento no sucede nada.



   ¿Qu´ es lo que falta?
      e

    Falta especificar 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 GUI’s monitoriza los eventos que se producen, como por
ejemplo pulsaciones sobre las teclas o pulsaciones con un bot´n del rat´n.
                                                             o         o

   El sistema operativo informa sobre estos eventos a los programas que est´n en ejecuci´n.
                                                                           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 delegaci´n de eventos. s
                                                                o

    El modelo de delegaci´n 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                                                  P´gina: 20
                                                                                                                           a
Interfaces Gr´ficas de Usuario en Java
                                                    a                                                         MySQL y Java
                                                     Julio 2004.                                     Universitat de Val`ncia
                                                                                                                       e


   Los escuchadores se registran en un componente. Por ejemplo, en un bot´n podemos registrar un
                                                                         o
escuchador de eventos de rat´n.
                            o

   Una vez que el escuchador ha sido a˜adido al componente, cuando se produzca un evento, los
                                      n
m´todos apropiados del manipulador (que han sido especificados en la interfaz) ser´n llamados.
 e                                                                               a




                                                                                       El bot´n es una fuente de eventos
                                                                                             o




                                                                                                       1
                                                                                                Registramos un
                                                                                                   oyente de
                                                                                               eventos de rat´n
                                                                                                             o
                                                                                               asociado al bot´n
                                                                                                              o




           En una GUI colocamos una serie de componentes entre los cuales se encuentra un JButton. Este com-
           ponente es una fuente de eventos de rat´n. Ahora registramos un oyente de eventos de rat´n en el
                                                  o                                                 o
           bot´n.
              o




                                                                                2 El usuario pulsa el rat´n sobre el bot´n
                                                                                                         o              o




                                                                                3 Se lanza un evento del tipo MouseEvent



                                                                                                   4
                                                                                               El oyente
                                                                                               recibe la
                                                                                              notificaci´n
                                                                                                       o
                                                                                              del evento



           Si el usuario pulsa con el rat´n sobre el bot´n se lanza un evento del tipo MouseEvent. Los oyentes que
                                         o              o
           se hayan registrados son notificados 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 m´todos: 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 definida en el paquete java.awt es una subclase de EventObject.

Ir al ´
      ındice                                        juan.gutierrez@uv.es                                                 P´gina: 21
                                                                                                                          a
Interfaces Gr´ficas de Usuario en Java
                                              a                                         MySQL y Java
                                               Julio 2004.                     Universitat de Val`ncia
                                                                                                 e


   Es la superclase de todos los eventos basados en AWT utilizados por el modelo de delegaci´n de
                                                                                            o
eventos.

   Hay dos clases de eventos:

           Eventos de componente o de bajo nivel ocurren cuando ocurre algo espec´  ıfico en un
           componente. Por ejemplo al moverse, entrar o salir el rat´n sobre un componente, al
                                                                    o
           ganar o perder la atenci´n,...
                                   o

           Eventos sem´nticos no son tan espec´
                         a                       ıficos como los anteriores y no son disparados
           necesariamente por una acci´n at´mica tal y como una pulsaci´n del rat´n. 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 Win-
dowEvent




   Los eventos sem´nticos son:
                  a

   ActionEvent ,AdjustmentEvent , ItemEvent, TextEvent

   A continuaci´n se muestran los eventos que se definen en AWT y cual es la acci´n que los produce
               o                                                                o

 Eventos AWT          Descripci´n
                                o
 ActionEvent          Se genera cuando el usuario pulsa un bot´n, 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.
 AdjustmentEvent      Se genera cuando se manipula una barra de deslizamiento.
 ItemEvent            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.
 TextEvent            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.




Ir al ´
      ındice                                juan.gutierrez@uv.es                           P´gina: 22
                                                                                            a
Interfaces Gr´ficas de Usuario en Java
                                                   a                                                     MySQL y Java
                                                    Julio 2004.                                 Universitat de Val`ncia
                                                                                                                  e


     Eventos AWT            Descripci´no
     ComponentEvent         Un evento que indica que un componente ha sido movido, ha cambiado
                            de tama˜o o ha sido ocultado. AWT maneja este evento (es decir que
                                     n
                            aunque expl´ ıcitamente tratemos este evento, AWT tambi´n lo har´).
                                                                                        e       a
     ContainerEvent         Se genera cuando se a˜ade o se elimina un componente de un contene-
                                                   n
                            dor. AWT trata este evento.
     FocusEvent             Se genera cuando un componente gana o pierde la atenci´n. Un com-
                                                                                         o
                            ponente tiene la atenci´n al pulsar sobre ´l con el rat´n o por que se ha
                                                    o                  e           o
                            llegado a ´l pulsando la tecla de tabulaci´n. El componente que tiene
                                       e                                o
                            la atenci´n recibe los eventos de teclado.
                                     o


     Eventos AWT              Descripci´n
                                        o
     KeyEvent                 Es una subclase de InputEvent. Se genera cuando se pulsa una tecla o
                              libera una tecla.
     MouseEvent               Es una subclase de InputEvent. Se genera cuando el rat´n se mueve,
                                                                                         o
                              se pulsa, se arrastra, o cuando entra o sale el rat´n de un componente.
                                                                                 o
     MouseWheelEvent          Un evento que indica que la rueda del rat´n se ha movido en un com-
                                                                          o
                              ponente.
     WindowEvent              Se genera cuando una ventana se activa, se desactiva, se cierra, se mi-
                              nimiza se maximiza o se sale de ella.


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

                                                           EventObject
                                                                 O




                                                         <<abstract>>
                                                            ; O aC
                                                         5 AWTEvent hQ
                                                        lll x           CC QQQQ
                                                   lll xx                 CC QQQ
                                             llll xxxx                      CC     QQQ
                                      ll lll         xx                       CC       QQQ
                                                                                          QQQ
                                    ll             x                            CC
                              lllll             xxx                               CC         QQQ
                                                                                                QQQ
                             l                x                                     CC
                          lll               xx                                        CC           QQQ
                       lll              xx
                                           x                                                          QQQ
                   lll                                                                  C
                              AdjustmentEvent             ComponentEvent
                                                           ll5 x< O aCChPPPPP
          ActionEvent                                                                ItemEvent          TextEvent
                                                        lll xxx         CC P
                                                   lll x                  CC PPPP
                                              lll xxx                       CC     PPP
                                       ll lll          x                      CC       PPP
                                    lll             xx                          CC        PPP
                                lll               xx                              CC         PPP
                             lll               xx                                   CC          PPP
                         llll                xx                                       CC           PPP
                      lll                 xx                                            C             PPP
                   ll                   xx                 <<abstract>>
        ContainerEvent            FocusEvent               InputEvent              PaintEvent        WindowEvent
                                                             <       aCC
                                                           xx           CC
                                                        xxx               CC
                                                      xx                    CC
                                                   xxx                        CC
                                                                                CC
                                                 xx                               CC
                                              xxx                                   CC
                                            xx                                        CC
                                          xx
                                   KeyEvent                                        MouseEvent




Ir al ´
      ındice                                       juan.gutierrez@uv.es                                        P´gina: 23
                                                                                                                a
Interfaces Gr´ficas de Usuario en Java
                                                            a                                                  MySQL y Java
                                                             Julio 2004.                              Universitat de Val`ncia
                                                                                                                        e


    Vamos a ver ahora algunas de las interfaces que se ofrecen en java.awt con el fin de especificar
los m´todos 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 est´n interesadas en escuchar eventos del
                                                              e
tipo MouseEvent

     El objeto de esta clase debe registrarse en un componente utilizando su m´todo addMouseListener.
                                                                              e

     Los m´todos que define 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 rat´n sobre el bot´n. 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 est´ndar.
                             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                                 P´gina: 24
                                                                                                                   a
Interfaces Gr´ficas de Usuario en Java
                                                                  a                                                                  MySQL y Java
                                                                   Julio 2004.                                              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 continuaci´n 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 sesi´n de JDBC pero ahora se utiliza un
                                                                   o
PreparedStatement.

import     j a v a . awt . e v e n t . ∗ ;
import     j a v a . awt . ∗ ;
import     j a v a x . swing . ∗ ;
import     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                                                        P´gina: 25
                                                                                                                                                a

Contenu connexe

Tendances

Tendances (10)

Java a tope
Java a topeJava a tope
Java a tope
 
Minimanualillo swi prolog
Minimanualillo swi prologMinimanualillo swi prolog
Minimanualillo swi prolog
 
Conceptos informáticos generales
Conceptos informáticos generalesConceptos informáticos generales
Conceptos informáticos generales
 
Manual De Maquina Vending Cafe Saeco Dap 5
Manual De Maquina Vending Cafe Saeco Dap 5Manual De Maquina Vending Cafe Saeco Dap 5
Manual De Maquina Vending Cafe Saeco Dap 5
 
Psp
PspPsp
Psp
 
Informática 2015
Informática 2015 Informática 2015
Informática 2015
 
Comandos cisco ccna_exploration
Comandos cisco ccna_explorationComandos cisco ccna_exploration
Comandos cisco ccna_exploration
 
El libro de django
El libro de djangoEl libro de django
El libro de django
 
Especificaciones tecnicas-presa
Especificaciones tecnicas-presaEspecificaciones tecnicas-presa
Especificaciones tecnicas-presa
 
Vba excel numericos
Vba excel numericosVba excel numericos
Vba excel numericos
 

Similaire à Proyecto Informatico (20)

Jsf
JsfJsf
Jsf
 
Manual Jsf
Manual JsfManual Jsf
Manual Jsf
 
Tutorial Jsf
Tutorial JsfTutorial Jsf
Tutorial Jsf
 
Tutorial JSF
Tutorial JSFTutorial JSF
Tutorial JSF
 
J2 me
J2 meJ2 me
J2 me
 
Java 2 micro edition
Java 2 micro editionJava 2 micro edition
Java 2 micro edition
 
Java A Tope J2 Me (Java 2 Micro Edition)
Java A Tope  J2 Me (Java 2 Micro Edition)Java A Tope  J2 Me (Java 2 Micro Edition)
Java A Tope J2 Me (Java 2 Micro Edition)
 
MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE C
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Desarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaDesarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-java
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapa
 
Libro javacontapa
Libro javacontapaLibro javacontapa
Libro javacontapa
 
Algoritmosy estructurasdedatos2015 1
Algoritmosy estructurasdedatos2015 1Algoritmosy estructurasdedatos2015 1
Algoritmosy estructurasdedatos2015 1
 
Formato proyecto i web fase 1
Formato proyecto i web fase 1Formato proyecto i web fase 1
Formato proyecto i web fase 1
 
Desarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-javaDesarrollo proyectos-informaticos-con-java
Desarrollo proyectos-informaticos-con-java
 
Matlab adv esp
Matlab adv espMatlab adv esp
Matlab adv esp
 
Manual completo python
Manual completo pythonManual completo python
Manual completo python
 
Python desde 0
Python desde 0Python desde 0
Python desde 0
 
Introduccion a matlab
Introduccion a matlabIntroduccion a matlab
Introduccion a matlab
 

Dernier

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 

Dernier (20)

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 

Proyecto Informatico

  • 1. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e ´ Indice 1. Introducci´n o 1 2. Crear una ventana 2 3. Componentes swing 5 3.1. JPanel y JLabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. ImageIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.3. JTextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.4. JTextArea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.5. JButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.6. JCheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.7. JRadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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. Organizaci´n 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 19 5.1. MouseListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.2. KeyListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.3. WindowListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.4. ActionListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.5. TextListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.6. ItemListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1. Introducci´n o En esta sesi´n se van a ver algunos aspectos de JFC (Java Foundation Classes). JFC es un conjunto o de componentes para trabajo con interfaces gr´ficas de usuario en Java. a Contiene: Abstract Window Toolkit (AWT) API para el dise˜o de interfaces gr´ficas 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 P´gina: 1 a
  • 2. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e APIs para trabajar con gr´ficos 2D, trabajo con im´genes, texto e impresi´n. a a o Swing APIs que extienden AWT para proporcionar una biblioteca de componentes para el dise˜o de interfaces gr´ficas de n a usuario enteramente realizadas en Java. Accesibilidad APIs para permitir que las aplicaciones sean accesibles a las personas con discapacidades. Internacionalizaci´n o Todas estas APIs incluyen soporte para crear aplicaciones que puedan ser utilizadas independientemente de la loca- lizaci´n del usuario. o Aqu´ vamos a ver algo de Swing y de AWT. ı A grandes rasgos, los pasos para crear una interfaz gr´fica 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 c´digo muestra c´mo se puede crear una ventana con tama˜o 300 por 200 pixels. o o n Ir al ´ ındice juan.gutierrez@uv.es P´gina: 2 a
  • 3. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 aplicaci´n 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 instrucci´n: 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 P´gina: 3 a
  • 4. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e JFrame JRoot JLayeredPane Content pane Glass pane Para a˜adir componentes a la ventana, primero se debe obtener el contenedor content pane y a n continuaci´n a˜adir los componentes a ´ste. o n e Por ejemplo, supongamos que deseamos dibujar un rect´ngulo en la ventana. El rect´ngulo 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 m´todo paintComponent(Graphics g) e 3. A˜adiremos un objeto de este tipo a la ventana. n El c´digo se muestra a continuaci´n: 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 P´gina: 4 a
  • 5. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 m´todo de la clase JPanel donde especificamos qu´ se debe realizar cuando e e haya que mostrar este componente, pero... ¿donde llamamos a este m´todo?. e La respuesta es: en ning´n sitio. Este m´todo es llamado autom´ticamente 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 modifica el tama˜o de la ventana n Cuando la ventana estaba minimizada y se vuelve a mostrar. Cuando otra aplicaci´n que cubre a la ventana se mueve. o ... 3. Componentes swing Un componente es un objeto que tiene una representaci´n gr´fica y que puede ser mostrado por o a pantalla y que puede utilizado por el usuario. Ejemplos de componentes son: JButton, JTextField, JScro- llPane, JTextArea, 1 Utilizan como base la clase java.awt.Component que est´ definida como abstracta. Todos los compo- a nentes (excepto los men´s) 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 figura muestra la relaci´n entre componentes y contenedores o 1 Hay otra serie de clases que no empiezan por J: Button, TextField, TextArea,... que pertenecen a AWT. 2 Contracci´n de Window y gadget. Una representaci´n 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 Ir al ´ ındice juan.gutierrez@uv.es P´gina: 5 a
  • 6. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e Contenedor alto nivel JFrame JApplet PPP PPP ... AA PPP } AA PPP }} AA PPP }} AA PPP }} A PPP }} PP Contenedor Contenedor PPPP Componentes intermedio intermedio ... JButton JPanel JPanel JTextField JScrollPane JScrollPane ... ... ... Componentes Componentes JButton ... JButton JTextField 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 P´gina: 6 a
  • 7. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e 3.2. ImageIcon Objetos de esta clase se pueden utilizar para mostrar im´genes. 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 aplicaci´n. 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 P´gina: 7 a
  • 8. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 tama˜o. 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 bot´n. 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 P´gina: 8 a
  • 9. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 P´gina: 9 a
  • 10. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e 3.8. ButtonGroup Se pueden agrupar una serie de JRadioButton de forma que s´lo 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 P´gina: 10 a
  • 11. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 P´gina: 11 a
  • 12. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 informaci´n en forma tabular. o Los objetos del tipo JScrollPane sirven para contener componentes y mostrar barras de desplaza- miento. 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” , ”12−07−04” , ” 5 ” } , { ” 2 ” , ”MySQL” , ”13−07−04” , ” 5 ” } , { ” 3 ” , ”JDBC” , ”14−07−04” , ” 5 ” } , { ” 4 ” , ”GUI” , ”15−07−04” , ” 5 ” } , { ” 5 ” , ” P r o y e c t o ” , ”16−07−04” , ” 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 P´gina: 12 a
  • 13. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 informaci´n 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 P´gina: 13 a
  • 14. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 P´gina: 14 a
  • 15. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 P´gina: 15 a
  • 16. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e 4. Organizaci´n de los componentes o Cuando en una ventana hay muchos componentes hay que organizarlos de alg´n modo. u Java proporciona diversos esquemas de organizaci´n (layout managers) que pueden ser utilizados o para organizar los componentes dentro de los contenedores. Los gestores de organizaci´n se encargan de reorganizar los componentes en caso de que el usuario o cambie el tama˜o de la ventana. n Los gestores de organizaci´n 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 m´todo setLayout(LayoutManager m). e 4.1. BorderLayout Se puede utilizar para colocar en un contenedor cinco componentes como m´ximo ya que propor- a 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 P´gina: 16 a
  • 17. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 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 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 a˜adiendo a la ventana. El tama˜o n n de los componentes se ajusta a su contenido. Ir al ´ ındice juan.gutierrez@uv.es P´gina: 17 a
  • 18. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 b1 = new JButton ( ”A” ) ; JButton b2 = new JButton ( ”B” ) ; JButton b3 = new JButton ( ” Bot´ n m´s l a r g o ” ) ; o a JButton b4 = new JButton ( ”D” ) ; JButton b5 = new 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 filas y columnas en funci´n de los valores pasados al constructor. Todas o las celdas tendr´n el mismo tama˜o. 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 P´gina: 18 a
  • 19. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 ser´n visibles. Una ilustraci´n es una pila de cartas en las que s´lo la superior e a o o es visible en un instante dado. 4.5. GridBagLayout Este es un organizador complejo que permite ajustar la posici´n de los componentes. Al colocar o los componentes en los contenedores se especifican las restricciones que se deben cumplir ( posici´n o del componente, anchura y altura del componente, separaci´n entre los componentes, posici´n dentro o o del espacio que ocupa, ...). Ejercicio 2 Se pide construir la interfaz gr´fica que se muestra en la siguiente figura. a 5. Tratamiento de eventos Hasta ahora las interfaces gr´ficas que se han mostrado tienen poca utilidad ya que no responden a a las acciones del usuario. ¿Qu´ ocurre si pulsamos sobre un bot´n? 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 P´gina: 19 a
  • 20. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e El bot´n es una fuente de eventos o En una GUI colocamos una serie de componentes entre los cuales se encuentra un JButton. Este com- ponente es una fuente de eventos de rat´n. o 1 El usuario pulsa el rat´n sobre el bot´n o o 2 Se lanza un evento del tipo MouseEvent Si el usuario pulsa con el rat´n sobre el bot´n se lanza un evento del tipo MouseEvent. Si no hay ning´n o o u objeto que recoja ese evento no sucede nada. ¿Qu´ es lo que falta? e Falta especificar 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 GUI’s monitoriza los eventos que se producen, como por ejemplo pulsaciones sobre las teclas o pulsaciones con un bot´n del rat´n. o o El sistema operativo informa sobre estos eventos a los programas que est´n en ejecuci´n. 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 delegaci´n de eventos. s o El modelo de delegaci´n 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 P´gina: 20 a
  • 21. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e Los escuchadores se registran en un componente. Por ejemplo, en un bot´n podemos registrar un o escuchador de eventos de rat´n. o Una vez que el escuchador ha sido a˜adido al componente, cuando se produzca un evento, los n m´todos apropiados del manipulador (que han sido especificados en la interfaz) ser´n llamados. e a El bot´n es una fuente de eventos o 1 Registramos un oyente de eventos de rat´n o asociado al bot´n o En una GUI colocamos una serie de componentes entre los cuales se encuentra un JButton. Este com- ponente es una fuente de eventos de rat´n. Ahora registramos un oyente de eventos de rat´n en el o o bot´n. o 2 El usuario pulsa el rat´n sobre el bot´n o o 3 Se lanza un evento del tipo MouseEvent 4 El oyente recibe la notificaci´n o del evento Si el usuario pulsa con el rat´n sobre el bot´n se lanza un evento del tipo MouseEvent. Los oyentes que o o se hayan registrados son notificados 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 m´todos: 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 definida en el paquete java.awt es una subclase de EventObject. Ir al ´ ındice juan.gutierrez@uv.es P´gina: 21 a
  • 22. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e Es la superclase de todos los eventos basados en AWT utilizados por el modelo de delegaci´n de o eventos. Hay dos clases de eventos: Eventos de componente o de bajo nivel ocurren cuando ocurre algo espec´ ıfico en un componente. Por ejemplo al moverse, entrar o salir el rat´n sobre un componente, al o ganar o perder la atenci´n,... o Eventos sem´nticos no son tan espec´ a ıficos como los anteriores y no son disparados necesariamente por una acci´n at´mica tal y como una pulsaci´n del rat´n. 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 Win- dowEvent Los eventos sem´nticos son: a ActionEvent ,AdjustmentEvent , ItemEvent, TextEvent A continuaci´n se muestran los eventos que se definen en AWT y cual es la acci´n que los produce o o Eventos AWT Descripci´n o ActionEvent Se genera cuando el usuario pulsa un bot´n, 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. AdjustmentEvent Se genera cuando se manipula una barra de deslizamiento. ItemEvent 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. TextEvent 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. Ir al ´ ındice juan.gutierrez@uv.es P´gina: 22 a
  • 23. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e Eventos AWT Descripci´no ComponentEvent Un evento que indica que un componente ha sido movido, ha cambiado de tama˜o o ha sido ocultado. AWT maneja este evento (es decir que n aunque expl´ ıcitamente tratemos este evento, AWT tambi´n lo har´). e a ContainerEvent Se genera cuando se a˜ade o se elimina un componente de un contene- n dor. AWT trata este evento. FocusEvent Se genera cuando un componente gana o pierde la atenci´n. Un com- o ponente tiene la atenci´n al pulsar sobre ´l con el rat´n o por que se ha o e o llegado a ´l pulsando la tecla de tabulaci´n. El componente que tiene e o la atenci´n recibe los eventos de teclado. o Eventos AWT Descripci´n o KeyEvent Es una subclase de InputEvent. Se genera cuando se pulsa una tecla o libera una tecla. MouseEvent Es una subclase de InputEvent. Se genera cuando el rat´n se mueve, o se pulsa, se arrastra, o cuando entra o sale el rat´n de un componente. o MouseWheelEvent Un evento que indica que la rueda del rat´n se ha movido en un com- o ponente. WindowEvent Se genera cuando una ventana se activa, se desactiva, se cierra, se mi- nimiza se maximiza o se sale de ella. La jerarqu´ de estas clases se muestra en el siguiente diagrama: ıa EventObject O <<abstract>> ; O aC 5 AWTEvent hQ lll x CC QQQQ lll xx CC QQQ llll xxxx CC QQQ ll lll xx CC QQQ QQQ ll x CC lllll xxx CC QQQ QQQ l x CC lll xx CC QQQ lll xx x QQQ lll C AdjustmentEvent ComponentEvent ll5 x< O aCChPPPPP ActionEvent ItemEvent TextEvent lll xxx CC P lll x CC PPPP lll xxx CC PPP ll lll x CC PPP lll xx CC PPP lll xx CC PPP lll xx CC PPP llll xx CC PPP lll xx C PPP ll xx <<abstract>> ContainerEvent FocusEvent InputEvent PaintEvent WindowEvent < aCC xx CC xxx CC xx CC xxx CC CC xx CC xxx CC xx CC xx KeyEvent MouseEvent Ir al ´ ındice juan.gutierrez@uv.es P´gina: 23 a
  • 24. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e Vamos a ver ahora algunas de las interfaces que se ofrecen en java.awt con el fin de especificar los m´todos 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 est´n interesadas en escuchar eventos del e tipo MouseEvent El objeto de esta clase debe registrarse en un componente utilizando su m´todo addMouseListener. e Los m´todos que define 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 rat´n sobre el bot´n. 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 est´ndar. 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 P´gina: 24 a
  • 25. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 continuaci´n 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 sesi´n de JDBC pero ahora se utiliza un o PreparedStatement. import j a v a . awt . e v e n t . ∗ ; import j a v a . awt . ∗ ; import j a v a x . swing . ∗ ; import 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 P´gina: 25 a
  • 26. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 P´gina: 26 a
  • 27. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 bot´n. El o resultado de esta b´squeda ser´n 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 bot´n para lanzar una b´squeda 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 figura muestra un posible dise˜o y su ejecuci´n. n o Ir al ´ ındice juan.gutierrez@uv.es P´gina: 27 a
  • 28. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 est´n interesadas en escuchar eventos del e tipo KeyEvent El objeto de esta clase debe registrarse en un componente utilizando su m´todo addKeyListener. e Los m´todos que define 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 n´mero de letras y n´meros frente al uso u u de otras teclas. import j a v a . awt . ∗ ; import j a v a . awt . e v e n t . ∗ ; import j a v a x . swing . ∗ ; import 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 P´gina: 28 a
  • 29. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 = t2−t 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 P´gina: 29 a
  • 30. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. Universitat de Val`ncia e Esta interfaz la deben implementar aquellas clases que est´n interesadas en escuchar eventos del e tipo WindowEvent El objeto de esta clase debe registrarse en un componente utilizando su m´todo addWindowListener. e Los m´todos que define 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 est´n interesadas en escuchar eventos del e tipo ActionEvent El objeto de esta clase debe registrarse en un componente utilizando su m´todo addActionListener. e Los m´todos que define 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 P´gina: 30 a
  • 31. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 est´n interesadas en escuchar eventos del e tipo TextEvent El objeto de esta clase debe registrarse en un componente utilizando su m´todo addTextListener. e Los m´todos que define esta interfaz son: e Ir al ´ ındice juan.gutierrez@uv.es P´gina: 31 a
  • 32. Interfaces Gr´ficas de Usuario en Java a MySQL y Java Julio 2004. 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 est´n interesadas en escuchar eventos del e tipo ItemEvent El objeto de esta clase debe registrarse en un componente utilizando su m´todo addItemListener. e Los m´todos que define 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 P´gina: 32 a