SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexión
Ejemplo de GUI con Swing

                                         Programación Orientada a Objetos
                                                  Facultad de Informática


                                                                        Juan Pavón Mestras
                                        Dep. Ingeniería del Software e Inteligencia Artificial
                                                           Universidad Complutense Madrid




   Una aplicación Swing sencilla

          El comportamiento deseado para esta aplicación es:
                 Cuando el usuario     pulsa en el botón Dí Hola, en el campo de
                 texto la aplicación   ha de poner 'Hola'
                 Cuando el usuario     pulsa en el botón Dí Adios, en el campo de
                 texto la aplicación   ha de poner 'Adios'
                 Cuando el usuario     cierra la ventana, la aplicación ha de
                 terminar




Juan Pavón Mestras
Facultad de Informática UCM, 2004                  Java Swing                                    2
Una aplicación Swing sencilla

          El diseño de toda interfaz conlleva, a grandes rasgos, los
          siguientes pasos:
                 Decidir la estructura de la interfaz
                   • Qué componentes gráficos se van a utilizar, y cómo se van a
                     relacionar estos componentes)
                 Decidir la disposición (layout) de los componentes
                   • Existen dos tipos de componentes: contenedores y componentes
                     atómicos
                   • Los contenedores sirven para organizar los componentes
                     contenidos en los mismos. Esta organización se denomina
                     disposición (o layout)
                 Decidir el comportamiento de la interfaz: gestión de eventos
                   • Algunos componentes son controles: permiten reaccionar ante
                     eventos del usuario. El comportamiento se especifica
                     programando las respuestas a dichos eventos. Normalmente,
                     dichas respuestas supondrán invocar funcionalidades de la lógica
                     de la aplicación
                   • Conviene mantener la interfaz y la lógica lo más independientes
                     posibles (veremos patrones que permiten lograr esto)


Juan Pavón Mestras
Facultad de Informática UCM, 2004               Java Swing                              3




   Una aplicación Swing sencilla: estructura

                                     Loro (JFrame)



                                     Panel Principal
                                      (JSplitPane)




                 Botonera (JPanel)                             Eco (JTextField)



           Hola (JButton)           Adios (JButton)



Juan Pavón Mestras
Facultad de Informática UCM, 2004               Java Swing                              4
Una aplicación Swing sencilla: estructura

     import javax.swing.*;

     public class Loro extends JFrame {
                private JTextField eco;

                    public Loro() {
                               setTitle("Loro");

                                    JComponent botonera = creaBotonera();
                                    JComponent eco = creaEco();
                                    // Crea panel con botonera y eco
                                    JSplitPane panelPrincipal =
                                        new JSplitPane(JSplitPane.VERTICAL_SPLIT,botonera,eco);
                                    // Añade el panel a la ventana principal
                                    getContentPane().add(panelPrincipal);
                                    // Se 'redimensiona' toda la interfaz gráfica en la ventana
                                    pack();
                                    // Y hace visible la ventana, con sus componentes
                                    setVisible(true);
                    }
     // ...


Juan Pavón Mestras
Facultad de Informática UCM, 2004                           Java Swing                            5




   Una aplicación Swing sencilla: estructura

                    private JComponent creaBotonera() {
                              JPanel botonera = new JPanel();
                              // Se crean los botones ...
                              JButton hola = new JButton("Dí Hola");
                              JButton adios = new JButton("Dí Adios");
                              // .. y se añaden al panel
                              botonera.add(hola);
                              botonera.add(adios);
                              return botonera;
                    }

                    private JComponent creaEco() {
                     // Se crea el campo de texto donde poner el eco
                               eco = new JTextField("Pulsa un botón");
                               return eco;
                    }
     // ...

Juan Pavón Mestras
Facultad de Informática UCM, 2004                           Java Swing                            6
Una aplicación Swing sencilla: estructura

                    public static void main(String[] args) {
                              Loro loro = new Loro();
                              //... aquí termina la ejecución del 'hilo principal',
                              // ... pero queda pendiente la ejecución del hilo de
                              // ... tratamiento de eventos... A partir de ahora toda la
                              // ... ejecución es gobernada por la interacción con el usuario.
                    }
     }




Juan Pavón Mestras
Facultad de Informática UCM, 2004                        Java Swing                              7




   Una aplicación Swing sencilla: comportamiento

          Los controles señalizan eventos
          Diferentes tipos de eventos, dependiendo de los controles
          La forma de tratar eventos en Swing (y en AWT, a partir
          de JDK 1.1) es mediante un mecanismo denominado
          delegación:
                 Por cada tipo de evento notificado por un control, el control
                 acepta un oyente de dicho evento (métodos addXXXListener)
                 Dicho oyente ha de implementar una interfaz adecuada
                 (XXXListener)
                 Cuando se produce un evento, el control invoca un método
                 apropiado del oyente. Es en este método donde se trata el
                 evento

                 Estas clases están declaradas en el paquete java.awt.event
                                    import java.awt.event.*;

Juan Pavón Mestras
Facultad de Informática UCM, 2004                        Java Swing                              8
Una aplicación Swing sencilla: comportamiento


                                       OyenteHola
                                       actionPerformed                        Escribir hola en
                                            (ActionEvent ev)                 el campo de texto




                                       OyenteAdios
                                       actionPerformed                        Escribir adios en
                                            (ActionEvent ev)                 el campo de texto




                                         OyenteVentana
                                         windowClosing                               Terminar la
                                            (WindowEvent ev)                          ejecución


Juan Pavón Mestras
Facultad de Informática UCM, 2004                          Java Swing                              9




   Una aplicación Swing sencilla: comportamiento
   asociado a los botones

     private JComponent creaBotonera() {
                JPanel botonera = new JPanel(); // Panel para contener los botones
                // Se crean los botones ...
                JButton hola = new JButton("Dí Hola");
                hola.addActionListener(
                             new ActionListener() {
                                  public void actionPerformed(ActionEvent ev) {
                                            eco.setText("Hola!");
                               }});

                    JButton adios = new JButton("Dí Adios");
                    adios.addActionListener(
                                new ActionListener() {
                                     public void actionPerformed(ActionEvent ev) {
                                               eco.setText("Adios!");
                                  }});

                    // .. y se añaden al panel
                    botonera.add(hola);
                    botonera.add(adios);
                    return botonera;
     }

Juan Pavón Mestras
Facultad de Informática UCM, 2004                          Java Swing                              10
Una aplicación Swing sencilla: comportamiento
   asociado a la ventana principal

     public Loro() {
              setTitle("Loro");

                    addWindowListener(
                           new WindowAdapter() {
                                   public void windowClosing(WindowEvent ev) {
                                   // Se termina la ejecución de la aplicación
                                             System.exit(0);
                                    }
                           });
                    // ...




Juan Pavón Mestras
Facultad de Informática UCM, 2004               Java Swing                              11




   Funcionamiento de las aplicaciones con GUI en Java

          Java es, por diseño, un lenguaje multiproceso: en un programa
          Java pueden existir (y de hecho existen) simultáneamente
          múltiples hilos de ejecución (threads) concurrentes
          Uno de estos hilos es el hilo de tratamiento de eventos
          En las aplicaciones con GUI, el hilo principal se limita a construir
          la estructura de la GUI, a asociar los oyentes adecuados con los
          controles y, hecho esto, termina …
          … pero la aplicación en sí no termina, puesto que todavía queda,
          al menos, un hilo con vida: el de tratamiento de eventos
                 Este hilo se encarga de tratar automáticamente eventos rutinarios
                 (p.ej. redibujar una ventana cuando ésta pasa a primer plano, o
                 cuando se quita una ventana que la ocultaba parcialmente, actualizar
                 la presentación como resultado de cambios ordenados por la
                 aplicación, etc.)
                 … y también se encarga de tratar los eventos de usuario, invocando
                 a los oyentes previamente registrados



Juan Pavón Mestras
Facultad de Informática UCM, 2004               Java Swing                              12

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Programando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte unoProgramando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte uno
 
Java
JavaJava
Java
 
Programación i
Programación iProgramación i
Programación i
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
Eventos y listeners en Java Swing
Eventos y listeners en Java SwingEventos y listeners en Java Swing
Eventos y listeners en Java Swing
 
Sesion12-componentes Visuales java
Sesion12-componentes Visuales javaSesion12-componentes Visuales java
Sesion12-componentes Visuales java
 
Eventos del ratón en Java
Eventos del ratón en JavaEventos del ratón en Java
Eventos del ratón en Java
 
Programacion en JAVA 2
Programacion en JAVA 2Programacion en JAVA 2
Programacion en JAVA 2
 
Concurrencia en Java
Concurrencia en JavaConcurrencia en Java
Concurrencia en Java
 
Curso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic netCurso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic net
 
Swing, awt y JOptionPane de java
Swing, awt y JOptionPane de java Swing, awt y JOptionPane de java
Swing, awt y JOptionPane de java
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01
 
Guis en java-1pp_2012_
Guis en java-1pp_2012_Guis en java-1pp_2012_
Guis en java-1pp_2012_
 
Tópicos avanzados de programación eventos
Tópicos  avanzados  de programación   eventosTópicos  avanzados  de programación   eventos
Tópicos avanzados de programación eventos
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
Controles swing
Controles swingControles swing
Controles swing
 
Ejemplo j internalframe_gine
Ejemplo j internalframe_gineEjemplo j internalframe_gine
Ejemplo j internalframe_gine
 
Lab1-POO
Lab1-POOLab1-POO
Lab1-POO
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 

Destacado

Telecomunicaciones Colombia
Telecomunicaciones ColombiaTelecomunicaciones Colombia
Telecomunicaciones Colombiaccardila
 
Organismos de telecomunicaciones
Organismos de telecomunicacionesOrganismos de telecomunicaciones
Organismos de telecomunicacionesCesar Torres
 
Mapa conceptual de telecomunicaciones
Mapa conceptual de telecomunicacionesMapa conceptual de telecomunicaciones
Mapa conceptual de telecomunicacionesClelianG
 
Legislación en seguridad y salud ocupacional en colombia
Legislación en seguridad y salud ocupacional en colombiaLegislación en seguridad y salud ocupacional en colombia
Legislación en seguridad y salud ocupacional en colombiaaromeroq
 
El Sector Telecomunicaciones
El Sector TelecomunicacionesEl Sector Telecomunicaciones
El Sector Telecomunicacionescarivang
 
Modelo para informe en ieee
Modelo para informe en ieeeModelo para informe en ieee
Modelo para informe en ieeedagoortiz
 

Destacado (7)

Telecomunicaciones Colombia
Telecomunicaciones ColombiaTelecomunicaciones Colombia
Telecomunicaciones Colombia
 
Organismos de telecomunicaciones
Organismos de telecomunicacionesOrganismos de telecomunicaciones
Organismos de telecomunicaciones
 
Mapa conceptual de telecomunicaciones
Mapa conceptual de telecomunicacionesMapa conceptual de telecomunicaciones
Mapa conceptual de telecomunicaciones
 
Gtc 45-sura
Gtc 45-suraGtc 45-sura
Gtc 45-sura
 
Legislación en seguridad y salud ocupacional en colombia
Legislación en seguridad y salud ocupacional en colombiaLegislación en seguridad y salud ocupacional en colombia
Legislación en seguridad y salud ocupacional en colombia
 
El Sector Telecomunicaciones
El Sector TelecomunicacionesEl Sector Telecomunicaciones
El Sector Telecomunicaciones
 
Modelo para informe en ieee
Modelo para informe en ieeeModelo para informe en ieee
Modelo para informe en ieee
 

Similar a 2.11.gui ejercicio swing-holaadios

Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01Ricardo Garcia
 
2TAP Tema 1-Eventos.pptx
2TAP Tema 1-Eventos.pptx2TAP Tema 1-Eventos.pptx
2TAP Tema 1-Eventos.pptxATM_SSI
 
Programando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parteProgramando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parteIng-D-SW-TorresKhano--ME
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Robert Wolf
 
Lps 15 gu-iconswing
Lps 15 gu-iconswingLps 15 gu-iconswing
Lps 15 gu-iconswingjbersosa
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc X
 
Informe de eventos topicos avanzados de programacion.
Informe de eventos topicos avanzados de programacion.Informe de eventos topicos avanzados de programacion.
Informe de eventos topicos avanzados de programacion.Aristides Miguel Mateo
 
Curso java desde cero nivel i - modulo v
Curso java desde cero   nivel i - modulo vCurso java desde cero   nivel i - modulo v
Curso java desde cero nivel i - modulo vGiovanny Guillen
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuarioaleja0940
 

Similar a 2.11.gui ejercicio swing-holaadios (20)

Flow layout
Flow layoutFlow layout
Flow layout
 
Eventos
EventosEventos
Eventos
 
Clase swing
Clase swingClase swing
Clase swing
 
Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01
 
Eventos
EventosEventos
Eventos
 
2TAP Tema 1-Eventos.pptx
2TAP Tema 1-Eventos.pptx2TAP Tema 1-Eventos.pptx
2TAP Tema 1-Eventos.pptx
 
Adrian eventos
Adrian eventosAdrian eventos
Adrian eventos
 
Programando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parteProgramando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parte
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4
 
Lps 15 gu-iconswing
Lps 15 gu-iconswingLps 15 gu-iconswing
Lps 15 gu-iconswing
 
Interfaces graficas(1)
Interfaces graficas(1)Interfaces graficas(1)
Interfaces graficas(1)
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fx
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
Informe de eventos topicos avanzados de programacion.
Informe de eventos topicos avanzados de programacion.Informe de eventos topicos avanzados de programacion.
Informe de eventos topicos avanzados de programacion.
 
Curso java desde cero nivel i - modulo v
Curso java desde cero   nivel i - modulo vCurso java desde cero   nivel i - modulo v
Curso java desde cero nivel i - modulo v
 
Practica 6
Practica 6Practica 6
Practica 6
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuario
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 

2.11.gui ejercicio swing-holaadios

  • 1. Ejemplo de GUI con Swing Programación Orientada a Objetos Facultad de Informática Juan Pavón Mestras Dep. Ingeniería del Software e Inteligencia Artificial Universidad Complutense Madrid Una aplicación Swing sencilla El comportamiento deseado para esta aplicación es: Cuando el usuario pulsa en el botón Dí Hola, en el campo de texto la aplicación ha de poner 'Hola' Cuando el usuario pulsa en el botón Dí Adios, en el campo de texto la aplicación ha de poner 'Adios' Cuando el usuario cierra la ventana, la aplicación ha de terminar Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 2
  • 2. Una aplicación Swing sencilla El diseño de toda interfaz conlleva, a grandes rasgos, los siguientes pasos: Decidir la estructura de la interfaz • Qué componentes gráficos se van a utilizar, y cómo se van a relacionar estos componentes) Decidir la disposición (layout) de los componentes • Existen dos tipos de componentes: contenedores y componentes atómicos • Los contenedores sirven para organizar los componentes contenidos en los mismos. Esta organización se denomina disposición (o layout) Decidir el comportamiento de la interfaz: gestión de eventos • Algunos componentes son controles: permiten reaccionar ante eventos del usuario. El comportamiento se especifica programando las respuestas a dichos eventos. Normalmente, dichas respuestas supondrán invocar funcionalidades de la lógica de la aplicación • Conviene mantener la interfaz y la lógica lo más independientes posibles (veremos patrones que permiten lograr esto) Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 3 Una aplicación Swing sencilla: estructura Loro (JFrame) Panel Principal (JSplitPane) Botonera (JPanel) Eco (JTextField) Hola (JButton) Adios (JButton) Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 4
  • 3. Una aplicación Swing sencilla: estructura import javax.swing.*; public class Loro extends JFrame { private JTextField eco; public Loro() { setTitle("Loro"); JComponent botonera = creaBotonera(); JComponent eco = creaEco(); // Crea panel con botonera y eco JSplitPane panelPrincipal = new JSplitPane(JSplitPane.VERTICAL_SPLIT,botonera,eco); // Añade el panel a la ventana principal getContentPane().add(panelPrincipal); // Se 'redimensiona' toda la interfaz gráfica en la ventana pack(); // Y hace visible la ventana, con sus componentes setVisible(true); } // ... Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 5 Una aplicación Swing sencilla: estructura private JComponent creaBotonera() { JPanel botonera = new JPanel(); // Se crean los botones ... JButton hola = new JButton("Dí Hola"); JButton adios = new JButton("Dí Adios"); // .. y se añaden al panel botonera.add(hola); botonera.add(adios); return botonera; } private JComponent creaEco() { // Se crea el campo de texto donde poner el eco eco = new JTextField("Pulsa un botón"); return eco; } // ... Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 6
  • 4. Una aplicación Swing sencilla: estructura public static void main(String[] args) { Loro loro = new Loro(); //... aquí termina la ejecución del 'hilo principal', // ... pero queda pendiente la ejecución del hilo de // ... tratamiento de eventos... A partir de ahora toda la // ... ejecución es gobernada por la interacción con el usuario. } } Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 7 Una aplicación Swing sencilla: comportamiento Los controles señalizan eventos Diferentes tipos de eventos, dependiendo de los controles La forma de tratar eventos en Swing (y en AWT, a partir de JDK 1.1) es mediante un mecanismo denominado delegación: Por cada tipo de evento notificado por un control, el control acepta un oyente de dicho evento (métodos addXXXListener) Dicho oyente ha de implementar una interfaz adecuada (XXXListener) Cuando se produce un evento, el control invoca un método apropiado del oyente. Es en este método donde se trata el evento Estas clases están declaradas en el paquete java.awt.event import java.awt.event.*; Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 8
  • 5. Una aplicación Swing sencilla: comportamiento OyenteHola actionPerformed Escribir hola en (ActionEvent ev) el campo de texto OyenteAdios actionPerformed Escribir adios en (ActionEvent ev) el campo de texto OyenteVentana windowClosing Terminar la (WindowEvent ev) ejecución Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 9 Una aplicación Swing sencilla: comportamiento asociado a los botones private JComponent creaBotonera() { JPanel botonera = new JPanel(); // Panel para contener los botones // Se crean los botones ... JButton hola = new JButton("Dí Hola"); hola.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ev) { eco.setText("Hola!"); }}); JButton adios = new JButton("Dí Adios"); adios.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ev) { eco.setText("Adios!"); }}); // .. y se añaden al panel botonera.add(hola); botonera.add(adios); return botonera; } Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 10
  • 6. Una aplicación Swing sencilla: comportamiento asociado a la ventana principal public Loro() { setTitle("Loro"); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent ev) { // Se termina la ejecución de la aplicación System.exit(0); } }); // ... Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 11 Funcionamiento de las aplicaciones con GUI en Java Java es, por diseño, un lenguaje multiproceso: en un programa Java pueden existir (y de hecho existen) simultáneamente múltiples hilos de ejecución (threads) concurrentes Uno de estos hilos es el hilo de tratamiento de eventos En las aplicaciones con GUI, el hilo principal se limita a construir la estructura de la GUI, a asociar los oyentes adecuados con los controles y, hecho esto, termina … … pero la aplicación en sí no termina, puesto que todavía queda, al menos, un hilo con vida: el de tratamiento de eventos Este hilo se encarga de tratar automáticamente eventos rutinarios (p.ej. redibujar una ventana cuando ésta pasa a primer plano, o cuando se quita una ventana que la ocultaba parcialmente, actualizar la presentación como resultado de cambios ordenados por la aplicación, etc.) … y también se encarga de tratar los eventos de usuario, invocando a los oyentes previamente registrados Juan Pavón Mestras Facultad de Informática UCM, 2004 Java Swing 12