SlideShare una empresa de Scribd logo
1 de 89
Desarrollo de interfaces:
 1.Interfaces de Usuario (Componentes,
 Eventos, Escuchadores… )


                                                    Jose Alberto Benítez Andrades
                                                                   jose@indipro.es
                                                                   www.indipro.es
                                                                     @indiproweb
                                                                     @jabenitez88

Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        1
Swing
Las interfaces gráficas de usuario (GUI) ofrecen al usuario ventanas,
cuadros de diálogo, barras de herramientas, botones, listas
desplegables y muchos otros elementos con los que ya estamos muy
acostumbrados a tratar.

Las aplicaciones son conducidas por eventos y se desarrollan haciendo
uso de las clases que para ello nos ofrece la API de Java.

La interfaz de usuario es la parte del programa que permite al usuario
interaccionar con él.

La API de Java proporciona una biblioteca de clases para el desarrollo
de Interfaces gráficas de usuario (en realidad son dos).

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88           2
Swing

La biblioteca proporciona un conjunto de herramientas para la
construcción de interfaces gráficas que tienen una apariencia y se
comportan de forma semejante en todas las plataformas en las que se
ejecuten.

La estructura básica de la biblioteca gira en torno a componentesy
contenedores. Los contenedores contienen componentes yson
componentes a su vez, de forma que los eventos pueden tratarse tanto
en contenedores como en componentes.

La API está constituida por clases, interfaces y derivaciones.AWT y
Swing

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88        3
Componentes Swing




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   4
Jerarquía de clases para las GUI
Component: superclase de todas las clases de interfaz gráfica.
Container: para agrupar componentes.
JComponent: superclase de todos los componentes de Swing que se
dibujan directamente en los lienzos (canvas).
Sus subclases son los elementos básicos de la GUI.
JFrame: ventana que no está contenida en otras ventanas.
JDialog: cuadro de diálogo.
JApplet: subclase de Applet para crear applets tipo Swing.
JPanel: contenedor invisible que mantiene componentes de interfaz y
que se puede anidar, colocándose en otros paneles o en ventanas.
También sirve de lienzo.
Graphics: clase abstracta que proporciona contextos gráficos
donde dibujar cadenas de texto, líneas y otras formas sencillas.


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88        5
Jerarquía de clases para las GUI

Color: color de los componentes gráficos.
Font: aspecto de los caracteres.
FontMetrics: clase abstracta para propiedades de las fuentes.
Categorías de clases:
 Contenedores:
      JFrame, JApplet, JWindow, JDialog
 Componentes intermedios:
      JPanel, JScrollPane
 Componentes:
      JLabel, JBbutton, JTextField, JTextArea, ...
 Clases de soporte:
      Graphics, Color, Font, ...


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   6
Jerarquía de clases para las GUI: JComponent




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   7
Jerarquía de clases para las GUI: JComponent




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   8
Jerarquía de componentes

    Graphics (java.awt)
    Component (funcionalidad básica de componentes gráficos)
         Button, Canvas, CheckBox, Choice, Label, List, ScrollBar
         TextComponent
                     TextField, TextArea
         Container (permite agrupar, añadir y eliminar componentes)
         (también definir diseño o disposición (layout managers))
                     ScrollPane
                     Panel
                                  Applet (java.applet)
                                              JApplet (javax.swing)
                     Window
                                  Frame
                                              JFrame (javax.swing)
                                  Dialog
                                              FileDialog
                                              JDialog (javax.swing)
                                  JWindow (javax.swing)
                     JComponent (javax.swing)


Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88         9
Contenedores

    Contenedores de alto nivel:
    JFrame
          Habitualmente la clase JFrame se emplea para crear la ventana principal de una
    aplicación en Swing.
    JDialog
          Ventanas de interacción con el usuario.

    Contenedores intermedios:
    JPanel
          Agrupa a otros componentes.
    JScrollPanel
          Incluye barras de desplazamiento.




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                              10
Contenedores




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   11
Jerarquía

                                           Contenedor
                                            alto-nivel
                                                        JFrame


                           Content
                                                                Menu Bar
                            Pane



                             JLabel


Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              12
Jerarquía




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   13
Jerarquía




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   14
Añadir elementos

Modo 1:
1. Obtenemos el panel de contenido del frame:
       Container panel = this.getContentPane();
2. Añadimos componentes a dicho panel:
       panel.add(unComponente);

Modo 2:
A partir de 1.5 también se puede hacer directamente sobre el
Jframe
        add(unComponente);

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   15
1. Con herencia de JFrame utilizando Container




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   16
2. Con herencia de JFrame sin Container




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   17
3. Ejemplo sin herencia con Container




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   18
4. Ejemplo sin herencia sin Container




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   19
Administradores de disposición

Los componentes se agregan al contenedor con el método add().

JButton unBoton = new JButton("Texto del botón");
panel.add(unBoton);

El efecto de add() depende del esquema de colocación o disposición (layout) del contenedor que se use.

Existen diversos esquemas de disposición: FlowLayout, BorderLayout, GridLayout, ...

Los objetos contenedores se apoyan en objetos LayoutManager (administradores de disposición).

Clases más usadas que implementa la interfaz LayoutManager:

FlowLayout: un componente tras otro de izquierda a derecha.
BorderLayout: 5 regiones en el contenedor (North, South, ...).
GridLayout: contenedor en filas y columnas.




  Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                          20
Administradores de disposición

Para organizar el contenedor se utiliza el método setLayout():
public void setLayout(LayoutManager mgr)




setLayout(new BorderLayout());
setLayout(new FlowLayout());
setLayout(new GridLayout(3,4));

El layout manager elige la mejor posición y tamaño de cada componente de
acuerdo al espacio disponible.

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88             21
Administradores de disposición

BorderLayout organiza el                                    FlowLayout coloca los componentes de
                                                            izquierda a derecha y de arriba hacia
contenedor en 5 zonas:
                                                            abajo:




 Para distribuciones más complejas podemos insertar paneles
 (JPanel) en los contenedores y obtener el tamaño de un
 componente con el método getSize().

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                  22
FlowLayout




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   23
BorderLayout




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   24
GridLayout

setLayout(new GridLayout(filas, columnas))

Crea una zona de filas x columnas componentes y éstos se van acomodando de izquierda a derecha y de
arriba a abajo.
GridLayout tiene otro constructor que permite establecer la separación (en pixels) ente los
componentes, que es cero con el primer constructor.

Así, por ejemplo:
new GridLayout(3, 4, 2, 2)

crea una organización de 3 filas y 4 columnas donde los componentes quedan a dos pixels de
separación.

Ejemplo:

setLayout(new GridLayout(3, 4, 2, 2);
for(int i = 0; i < 3 * 4; i++) {
   add(new JButton(Integer.toString(i + 1)));
}



  Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                       25
GridLayout




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   26
Paneles como contenedores

Los paneles actúan como pequeños contenedores para agrupar
componentes. Colocamos los componentes en paneles y los
paneles en el frame o incluso en otros paneles.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   27
Paneles como contenedores




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   28
Paneles como contenedores




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   29
Dibujo de gráficos en paneles

JPanel se puede usar para dibujar.

Para dibujar en un panel se crea una clase derivada de Jpanel y se redefine el
método paintComponent() que le indica al panel como dibujar.

La clase Graphics es una clase abstracta para todos los contextos gráficos.

Una vez obtenido el contexto gráfico podemos llamar desde este
objeto a las funciones gráficas definidas en la clase Graphics.

Graphics contiene información acerca de la zona que necesita ser redibujada:
el objeto donde dibujar, un origen de traslación, el color actual, la fuente
actual, etcétera.


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                   30
Ejemplo de dibujo




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   31
Ejemplo de dibujo

Cuando utilizamos el método paintComponent() para dibujar en un contexto
gráfico g, ese contexto es un ejemplar de una subclase concreta de la clase
Graphics para la plataforma específica.
El método paintComponent() es llamado la primera vez y cada vez que es
necesario redibujar el componente.
Al hacer super.paintComponent(g) nos aseguramos de que el área visualizada
se limpia antes de volver a dibujar.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88            32
Ejemplo de dibujo


                                                                 Creación de un color RGB




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                33
Algunos métodos de Graphics




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   34
Interacción con el usuario

Al interactuar con la aplicación, el usuario:
 Acciona componentes (ActionEvent).
         El usuario pulsa un botón.
         El usuario termina de introducir un texto en un campo y presiona Intro.
         El usuario selecciona un elemento de una lista pulsando el preferido (o de un menú).
         Pulsa o suelta botones del ratón (MouseEvent).

 Minimiza, cierra o manipula una ventana (WindowEvent).
 Escribe con el teclado (KeyEvent).
 Descubre porciones de ventanas (PaintEvent)




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                   35
Interacción con el usuario

Cuando el usuario de un programa o applet mueve el ratón, presiona
un pulsador o pulsa una tecla, genera un evento (actionEvent).

Los eventos son objetos de ciertas clases. Normalmente un objeto de
alguna subclase de EventObject que indica:

   El elemento que accionó el usuario.
   La identificación del evento que indica la naturaleza del evento.
   La posición del ratón en el momento de la interacción.
   Teclas adicionales pulsadas por el usuario, como la tecla
   Control, la tecla de Cambio a mayúsculas, etcétera.

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88          36
Acciones del usuario




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   37
Modelo para responder a eventos

Creamos un manejador de eventos en dos pasos:
• ƒDefinimos una clase específica que haga de oyente de
   eventos y que implemente el método actionPerformed().




• Registramos un ejemplar como oyente de componentes:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   38
Modelo para responder a eventos




Se añade el oyente especificado (ejemplar de MiOyente) a la lista de
oyentes para recibir eventos de acción (ActionEvent) desde ese
componente.

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88         39
Ejemplo: botón con pitido




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   40
Ejemplo: reproducir un valor




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   41
Ejemplo: reproducir un valor




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   42
Ejemplo: contador de pulsaciones




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   43
Ejemplo: cambio de color




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   44
Ejemplo: cambio de color




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   45
ActionEvent

El objeto ActionEvent ofrece un método getActionCommand()
que devuelve un objeto con la información sobre el origen del
evento (el botón en nuestro caso).

Con un botón, devuelve la etiqueta del botón.
Para identificar botones individuales:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   46
ActionEvent

El método getSource() indica el objeto en el que se ha
originado el evento:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   47
Un conversor Euros-Pesetas




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   48
Un conversor Euros-Pesetas




                                                                La clase OyenteBoton es
                                                                interna y tiene acceso a
                                                                los elementos de la clase
                                                                Contenedora




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                           49
Interfaces para procesar eventos

Para facilitar la tarea del programador se han creado una serie de interfaces
que deben implementarse cuando se quieren procesar algunos de estos
eventos. Algunas interfaces y sus métodos son:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                  50
Interfaces para procesar eventos

• JButton: Botón aislado. Puede pulsarse, pero su estado no cambia
• „JToggleButton : Botón seleccionable. Cuando se pulsa el botón, su estado
  pasa a seleccionado, hasta que se pulsa de nuevo (entonces se
  deselecciona)
     o    „isSelected() permite chequear su estado

• „JCheckBox : Especialización de JToggleButton que implementa una casilla
  de verificación. Botón con estado interno, que cambia de apariencia de
  forma adecuada según si está o no está seleccionado
• „JRadioButton: Especialización de JToggleButton que tiene sentido dentro
  de un mismo grupo de botones (ButtonGroup) que controla que
  sólamente uno de ellos está seleccionado




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88               51
Componentes : JButton

• Constructores:
        JButton(String text)
       JButton(String text, Icon icon)
       JButton(Icon icon)
• ƒ Respuesta a botones:
     o Implementar la interfaz ActionListener
     o Implementar el método actionPerformed(ActionEvent e)




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   52
Ejemplos

boton1 = new JButton("A Euros ");
boton1.setIcon(new ImageIcon("flag1.gif"));




boton2 = new JButton(new ImageIcon("flag2.gif"));




boton3 = new JButton("Botón",new ImageIcon("flag8.gif"));




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   53
Componentes : JLabel

Para texto, una imagen o ambos:
JLabel(String text,
          int horizontalAlignment)
JLabel(String text)
JLabel(Icon icon)
JLabel(Icon icon,
          int horizontalAlignment)



eti1 = new JLabel("Etiqueta de texto...");
eti2 = new JLabel(new ImageIcon("flag8.gif"));




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   54
Componentes : JTextField

Campos de texto para introducir caracteres:
JTextField(int columns)
JTextField(String text)
JTextField(String text, int columns)
JTextField text1 = new JTextField("hola", 10);

Poner texto: text1.setText("Adios");
Obtener texto: String str = text1.getText();
Agregar al Panel: p1.add(text1);




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   55
Componentes : JComboBox

Listas de elementos para seleccionar un solo valor:
Creación:          JComboBox ch1 = new JComboBox();
Agregar opciones: ch1.addItem(Object elemento);
Registrar Evento: ch1.addItemListener( objeto);
Obtener selección: val = ch1.getSelectedIndex();
                    ch1.getItem()
Implementar la interfaz ItemListener
Implementar el método itemStateChanged(ItemEvent e)
  ch1.addItemListener(new OyenteItem());
  . . .
  class OyenteItem implements ItemListener {
         public void itemStateChanged(ItemEvent e) {
         ...
         }
  }


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   56
Componentes : JList

Listas de elementos para seleccionar uno o varios valores:
JList l1 = new JList();
JList l2 = new JList(Object[] elements);
String[] cosas = {"Opción 1", "Opción 2", "Opción 3"};
Jlist l2 = new Jlist(cosas);

Registrar evento: l2.addListSelectionListener(oyente);

Obtener selección:
int[] indices = l2.getSelectedIndices();




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   57
Componentes : JList

Implementar la interfaz ListSelectionListenner
Implementar el método valueChanged(ListSelectionEvent e)
  l.addListSelectionListener(new OyenteLista());
  ...
  class OyenteLista implements ListSelectionListener {
        public void valueChanged(ListSelectionEvent e) {
           int[] indices = l.getSelectedIndices();
           int i;
           for(i = 0; i < indices.length; i++) {
           ...
           }
        }
    }


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   58
Componentes : JScrollBar

Creación:
bar1 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,100);
Registrar evento:
bar1.addAdjustmentListener(oyente);
Implementar la interfaz AdjustmentListener
Implementar el método
adjustmentValueChanged(AdjustmentEvent e)
 bar1.addAdjustmentListener(new OyenteBarra());
 ...
 class OyenteBarra implements AdjustmentListener {
            public void adjustmentValueChanged(AdjustmentEvent e) {
            ... }
  }
Obtener valor:
int val = bar1.getValue(); // val entre 0 y 100


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88        59
Componentes: JScrollBar y JComboBox




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   60
Componentes: JScrollBar y JComboBox




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   61
Componentes: JScrollBar y JComboBox




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   62
Movimientos de ratón




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   63
Pulsaciones de ratón




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   64
Ejemplo de cuadro de mensaje




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   65
Ejemplo de cuadro de opciones




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   66
Ejemplo de cuadro de entrada de datos




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   67
Ejemplo de cuadro de entrada de datos




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   68
Menús

Java ofrece varias clases para poner menús en una ventana:
JMenuBar
JMenu
JMenuItem
JCheckBoxMenuItem
JRadioButtonMenuItem

Un JFrame o JApplet puede guardar un barra de menú donde se cuelgan menús
desplegables.

Los menús tienen elementos de menú que puede seleccionar el usuario.

Las barras de menús se pueden contemplar como una estructura que soporta menús.


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                    69
Menús

Una ventana (frame) sólo puede tener una barra de menús
(objeto MenuBar), que se sitúa en la parte de arriba del mismo.

Los submenús son botones JMenu.

Los elementos de los menús son botones JMenuItem.

Cuando se activa un menú se despliegan automáticamente las
opciones del menú.



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88    70
Menús




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   71
Ejemplo de menú




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   72
Ejemplo de menú




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   73
Ejemplo de menú




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   74
Otro ejemplo

Aplicación que permite realizar operaciones aritméticas.
La interfaz contiene etiquetas y campos de texto para los
operandos y el resultado. La operación se selecciona en el menú:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88     75
Otro ejemplo




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   76
Otro ejemplo




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   77
Otro ejemplo




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   78
Otro ejemplo




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   79
Clases adaptadoras




¡ Poco eficiente, sólo implementamos un método !




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   80
Clases adaptadoras




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   81
Clases adaptadoras

• Si por ejemplo una de nuestras clases implementa la interfaz
  WindowListener, deberá implementar todos los métodos sociados, aún
  cuando sólo utilicemos uno de ellos.

• „Las clases adaptadoras se encargan de implementar todos los métodos
  del la clase de escucha. Así sólo necesitaremos redefinir aquellos métodos
  que nos van a ser útiles para gestionar eventos , sin preocuparnos del
  resto.

• Para ello dedemos indicar que nuestra clase es una subclase del
  adaptador:
       class UnaClase extends Adaptador{ ... }



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 82
Clases adaptadoras

class MiAdaptador extends WindowAdapter {
      public void windowClosing(windowEvent e) {
            System.exit(0);
      }
}



. . .
this.addWindowListener(new MiAdaptador());
. . .




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   83
Clases adaptadoras

Sólo las clases que poseen más de un método tienen adaptador , y son las
siguientes:

ComponentListener posee ComponentAdapter
ContainerListener posee ContainerAdapter
FocusListener posee FocusAdapter
KeyListener posee KeyAdapter
MouseListener posee MouseAdapter
MouseMotionListener posee MouseMotionAdapter
WindowListener posee WindowAdapter




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88             84
Ejemplo




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   85
Arquitectura MVC (Modelo-Vista-Controlador)

La arquitectura MVC es una arquitectura típica de diseño de GUI.
 El modelo representa la estructura lógica de la GUI, independientemente
   de su representación visual.
 La vista constituye la representación visual de la GUI.
 El controlador constituye la lógica de interacción con el usuario.

El mejor modelo separa en las tres partes:

public static void main(String args[]) {
  Modelo modelo = new Modelo();
  Controlador controlador = new Controlador(modelo);
  GUI gui = new GUI(controlador); }


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              86
Applet mínimo con Swing (JApplet)




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   87
Esquema de applet con swing




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   88
Ejemplo




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   89

Más contenido relacionado

La actualidad más candente

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazadorRickyZhengHu
 
Elementos orientados al flujo
Elementos orientados al flujoElementos orientados al flujo
Elementos orientados al flujoAlumic S.A
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de usoTensor
 
Metodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentesMetodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentesEmmanuel Fontán
 
Mecanismo de sincronización de procesos
Mecanismo de sincronización de procesosMecanismo de sincronización de procesos
Mecanismo de sincronización de procesosjulio izaguirre
 
Sistemas de archivo - FAT - NTFS
Sistemas de archivo - FAT - NTFSSistemas de archivo - FAT - NTFS
Sistemas de archivo - FAT - NTFSPablo Macon
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAGabriel Suarez
 
Diseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando NetbeansDiseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando NetbeansEmerson Garay
 
Lenguajes de Descripción de Arquitecturas
Lenguajes de Descripción de Arquitecturas Lenguajes de Descripción de Arquitecturas
Lenguajes de Descripción de Arquitecturas Shelisse De la Cruz
 
Programaci un+concurrente+en+java
Programaci un+concurrente+en+javaProgramaci un+concurrente+en+java
Programaci un+concurrente+en+javaIsaias Teran Merino
 
Estructura jerarquica de un sistema operativo
Estructura jerarquica de un sistema operativoEstructura jerarquica de un sistema operativo
Estructura jerarquica de un sistema operativoYurley Ochoa
 

La actualidad más candente (20)

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazador
 
Elementos orientados al flujo
Elementos orientados al flujoElementos orientados al flujo
Elementos orientados al flujo
 
Gestion de memoria en windows
Gestion de memoria en windowsGestion de memoria en windows
Gestion de memoria en windows
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de uso
 
Metodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentesMetodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentes
 
Mecanismo de sincronización de procesos
Mecanismo de sincronización de procesosMecanismo de sincronización de procesos
Mecanismo de sincronización de procesos
 
Windows.forms.ejercicios
Windows.forms.ejerciciosWindows.forms.ejercicios
Windows.forms.ejercicios
 
Sistemas de archivo - FAT - NTFS
Sistemas de archivo - FAT - NTFSSistemas de archivo - FAT - NTFS
Sistemas de archivo - FAT - NTFS
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
 
Diseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando NetbeansDiseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando Netbeans
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
Lenguajes de Descripción de Arquitecturas
Lenguajes de Descripción de Arquitecturas Lenguajes de Descripción de Arquitecturas
Lenguajes de Descripción de Arquitecturas
 
Presentación diseño sistemas sm
Presentación diseño sistemas smPresentación diseño sistemas sm
Presentación diseño sistemas sm
 
Diagrama de clases - Ejemplo monográfico 02
Diagrama de clases - Ejemplo monográfico 02Diagrama de clases - Ejemplo monográfico 02
Diagrama de clases - Ejemplo monográfico 02
 
8.realizacion de pruebas
8.realizacion de pruebas8.realizacion de pruebas
8.realizacion de pruebas
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 
Easy case
Easy caseEasy case
Easy case
 
Programaci un+concurrente+en+java
Programaci un+concurrente+en+javaProgramaci un+concurrente+en+java
Programaci un+concurrente+en+java
 
Estructura jerarquica de un sistema operativo
Estructura jerarquica de un sistema operativoEstructura jerarquica de un sistema operativo
Estructura jerarquica de un sistema operativo
 

Similar a Confección de interfaces de usuario con JAVA - SWING

Swing 121012064634-phpapp01
Swing 121012064634-phpapp01Swing 121012064634-phpapp01
Swing 121012064634-phpapp01Ricardo Garcia
 
Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposciciónAndy Bsc
 
Lps 15 gu-iconswing
Lps 15 gu-iconswingLps 15 gu-iconswing
Lps 15 gu-iconswingjbersosa
 
Controles de Interfaz Introduccion.pdf
Controles de Interfaz Introduccion.pdfControles de Interfaz Introduccion.pdf
Controles de Interfaz Introduccion.pdfJUANCARLOSCUMBICUSBR
 
Actividad 4 presentacion multimedia modulo 4
Actividad 4 presentacion multimedia modulo 4Actividad 4 presentacion multimedia modulo 4
Actividad 4 presentacion multimedia modulo 4Celestino Hernandez
 
Curso Java Inicial 8 Conceptos Avanzados Awt
Curso Java Inicial   8 Conceptos Avanzados   AwtCurso Java Inicial   8 Conceptos Avanzados   Awt
Curso Java Inicial 8 Conceptos Avanzados AwtEmilio Aviles Avila
 
Presentacion de dictar clase de gui
Presentacion de dictar clase de guiPresentacion de dictar clase de gui
Presentacion de dictar clase de guijohernyjose
 
Controles de Interfaz Parte Practica.pdf
Controles de Interfaz Parte Practica.pdfControles de Interfaz Parte Practica.pdf
Controles de Interfaz Parte Practica.pdfJUANCARLOSCUMBICUSBR
 
Manual gui net_beans
Manual gui net_beansManual gui net_beans
Manual gui net_beansYefry Coz
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing Laura
 
Aplicaciones moviles clase10 layout
Aplicaciones moviles clase10 layoutAplicaciones moviles clase10 layout
Aplicaciones moviles clase10 layoutJohan Silva Cueva
 

Similar a Confección de interfaces de usuario con JAVA - SWING (20)

Swing intefaz grafica de usuario
Swing intefaz grafica de usuarioSwing intefaz grafica de usuario
Swing intefaz grafica de usuario
 
Swing 121012064634-phpapp01
Swing 121012064634-phpapp01Swing 121012064634-phpapp01
Swing 121012064634-phpapp01
 
Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
 
Programacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_IProgramacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_I
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
Lps 15 gu-iconswing
Lps 15 gu-iconswingLps 15 gu-iconswing
Lps 15 gu-iconswing
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
Controles de Interfaz Introduccion.pdf
Controles de Interfaz Introduccion.pdfControles de Interfaz Introduccion.pdf
Controles de Interfaz Introduccion.pdf
 
Actividad 4 presentacion multimedia modulo 4
Actividad 4 presentacion multimedia modulo 4Actividad 4 presentacion multimedia modulo 4
Actividad 4 presentacion multimedia modulo 4
 
Clase swing
Clase swingClase swing
Clase swing
 
C Sharp Avanzado Dia 1
C Sharp Avanzado   Dia 1C Sharp Avanzado   Dia 1
C Sharp Avanzado Dia 1
 
Curso Java Inicial 8 Conceptos Avanzados Awt
Curso Java Inicial   8 Conceptos Avanzados   AwtCurso Java Inicial   8 Conceptos Avanzados   Awt
Curso Java Inicial 8 Conceptos Avanzados Awt
 
Presentacion de dictar clase de gui
Presentacion de dictar clase de guiPresentacion de dictar clase de gui
Presentacion de dictar clase de gui
 
Controles de Interfaz Parte Practica.pdf
Controles de Interfaz Parte Practica.pdfControles de Interfaz Parte Practica.pdf
Controles de Interfaz Parte Practica.pdf
 
Interfaces graficas(1)
Interfaces graficas(1)Interfaces graficas(1)
Interfaces graficas(1)
 
Manual gui net_beans
Manual gui net_beansManual gui net_beans
Manual gui net_beans
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
Vbr Awt 01
Vbr Awt 01Vbr Awt 01
Vbr Awt 01
 
Creacion de-proyectos-vb-net-2010
Creacion de-proyectos-vb-net-2010Creacion de-proyectos-vb-net-2010
Creacion de-proyectos-vb-net-2010
 
Aplicaciones moviles clase10 layout
Aplicaciones moviles clase10 layoutAplicaciones moviles clase10 layout
Aplicaciones moviles clase10 layout
 

Más de Jose Benítez Andrades

Más de Jose Benítez Andrades (6)

7.distribucion de aplicaciones
7.distribucion de aplicaciones7.distribucion de aplicaciones
7.distribucion de aplicaciones
 
6.documentacion de aplicaciones
6.documentacion de aplicaciones6.documentacion de aplicaciones
6.documentacion de aplicaciones
 
5.confección de informes
5.confección de informes5.confección de informes
5.confección de informes
 
4.usabilidad
4.usabilidad4.usabilidad
4.usabilidad
 
3.creacion de componentes visuales
3.creacion de componentes visuales3.creacion de componentes visuales
3.creacion de componentes visuales
 
Generación de Interfaces a partir de XML
Generación de Interfaces a partir de XMLGeneración de Interfaces a partir de XML
Generación de Interfaces a partir de XML
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 

Último (19)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 

Confección de interfaces de usuario con JAVA - SWING

  • 1. Desarrollo de interfaces: 1.Interfaces de Usuario (Componentes, Eventos, Escuchadores… ) Jose Alberto Benítez Andrades jose@indipro.es www.indipro.es @indiproweb @jabenitez88 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 1
  • 2. Swing Las interfaces gráficas de usuario (GUI) ofrecen al usuario ventanas, cuadros de diálogo, barras de herramientas, botones, listas desplegables y muchos otros elementos con los que ya estamos muy acostumbrados a tratar. Las aplicaciones son conducidas por eventos y se desarrollan haciendo uso de las clases que para ello nos ofrece la API de Java. La interfaz de usuario es la parte del programa que permite al usuario interaccionar con él. La API de Java proporciona una biblioteca de clases para el desarrollo de Interfaces gráficas de usuario (en realidad son dos). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 2
  • 3. Swing La biblioteca proporciona un conjunto de herramientas para la construcción de interfaces gráficas que tienen una apariencia y se comportan de forma semejante en todas las plataformas en las que se ejecuten. La estructura básica de la biblioteca gira en torno a componentesy contenedores. Los contenedores contienen componentes yson componentes a su vez, de forma que los eventos pueden tratarse tanto en contenedores como en componentes. La API está constituida por clases, interfaces y derivaciones.AWT y Swing Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 3
  • 4. Componentes Swing Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 4
  • 5. Jerarquía de clases para las GUI Component: superclase de todas las clases de interfaz gráfica. Container: para agrupar componentes. JComponent: superclase de todos los componentes de Swing que se dibujan directamente en los lienzos (canvas). Sus subclases son los elementos básicos de la GUI. JFrame: ventana que no está contenida en otras ventanas. JDialog: cuadro de diálogo. JApplet: subclase de Applet para crear applets tipo Swing. JPanel: contenedor invisible que mantiene componentes de interfaz y que se puede anidar, colocándose en otros paneles o en ventanas. También sirve de lienzo. Graphics: clase abstracta que proporciona contextos gráficos donde dibujar cadenas de texto, líneas y otras formas sencillas. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 5
  • 6. Jerarquía de clases para las GUI Color: color de los componentes gráficos. Font: aspecto de los caracteres. FontMetrics: clase abstracta para propiedades de las fuentes. Categorías de clases:  Contenedores:  JFrame, JApplet, JWindow, JDialog  Componentes intermedios:  JPanel, JScrollPane  Componentes:  JLabel, JBbutton, JTextField, JTextArea, ...  Clases de soporte:  Graphics, Color, Font, ... Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 6
  • 7. Jerarquía de clases para las GUI: JComponent Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 7
  • 8. Jerarquía de clases para las GUI: JComponent Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 8
  • 9. Jerarquía de componentes Graphics (java.awt) Component (funcionalidad básica de componentes gráficos) Button, Canvas, CheckBox, Choice, Label, List, ScrollBar TextComponent TextField, TextArea Container (permite agrupar, añadir y eliminar componentes) (también definir diseño o disposición (layout managers)) ScrollPane Panel Applet (java.applet) JApplet (javax.swing) Window Frame JFrame (javax.swing) Dialog FileDialog JDialog (javax.swing) JWindow (javax.swing) JComponent (javax.swing) Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 9
  • 10. Contenedores Contenedores de alto nivel: JFrame Habitualmente la clase JFrame se emplea para crear la ventana principal de una aplicación en Swing. JDialog Ventanas de interacción con el usuario. Contenedores intermedios: JPanel Agrupa a otros componentes. JScrollPanel Incluye barras de desplazamiento. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 10
  • 11. Contenedores Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 11
  • 12. Jerarquía Contenedor alto-nivel JFrame Content Menu Bar Pane JLabel Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 12
  • 13. Jerarquía Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 13
  • 14. Jerarquía Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 14
  • 15. Añadir elementos Modo 1: 1. Obtenemos el panel de contenido del frame: Container panel = this.getContentPane(); 2. Añadimos componentes a dicho panel: panel.add(unComponente); Modo 2: A partir de 1.5 también se puede hacer directamente sobre el Jframe add(unComponente); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 15
  • 16. 1. Con herencia de JFrame utilizando Container Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 16
  • 17. 2. Con herencia de JFrame sin Container Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 17
  • 18. 3. Ejemplo sin herencia con Container Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 18
  • 19. 4. Ejemplo sin herencia sin Container Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 19
  • 20. Administradores de disposición Los componentes se agregan al contenedor con el método add(). JButton unBoton = new JButton("Texto del botón"); panel.add(unBoton); El efecto de add() depende del esquema de colocación o disposición (layout) del contenedor que se use. Existen diversos esquemas de disposición: FlowLayout, BorderLayout, GridLayout, ... Los objetos contenedores se apoyan en objetos LayoutManager (administradores de disposición). Clases más usadas que implementa la interfaz LayoutManager: FlowLayout: un componente tras otro de izquierda a derecha. BorderLayout: 5 regiones en el contenedor (North, South, ...). GridLayout: contenedor en filas y columnas. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 20
  • 21. Administradores de disposición Para organizar el contenedor se utiliza el método setLayout(): public void setLayout(LayoutManager mgr) setLayout(new BorderLayout()); setLayout(new FlowLayout()); setLayout(new GridLayout(3,4)); El layout manager elige la mejor posición y tamaño de cada componente de acuerdo al espacio disponible. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 21
  • 22. Administradores de disposición BorderLayout organiza el FlowLayout coloca los componentes de izquierda a derecha y de arriba hacia contenedor en 5 zonas: abajo: Para distribuciones más complejas podemos insertar paneles (JPanel) en los contenedores y obtener el tamaño de un componente con el método getSize(). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 22
  • 23. FlowLayout Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 23
  • 24. BorderLayout Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 24
  • 25. GridLayout setLayout(new GridLayout(filas, columnas)) Crea una zona de filas x columnas componentes y éstos se van acomodando de izquierda a derecha y de arriba a abajo. GridLayout tiene otro constructor que permite establecer la separación (en pixels) ente los componentes, que es cero con el primer constructor. Así, por ejemplo: new GridLayout(3, 4, 2, 2) crea una organización de 3 filas y 4 columnas donde los componentes quedan a dos pixels de separación. Ejemplo: setLayout(new GridLayout(3, 4, 2, 2); for(int i = 0; i < 3 * 4; i++) { add(new JButton(Integer.toString(i + 1))); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 25
  • 26. GridLayout Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 26
  • 27. Paneles como contenedores Los paneles actúan como pequeños contenedores para agrupar componentes. Colocamos los componentes en paneles y los paneles en el frame o incluso en otros paneles. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 27
  • 28. Paneles como contenedores Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 28
  • 29. Paneles como contenedores Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 29
  • 30. Dibujo de gráficos en paneles JPanel se puede usar para dibujar. Para dibujar en un panel se crea una clase derivada de Jpanel y se redefine el método paintComponent() que le indica al panel como dibujar. La clase Graphics es una clase abstracta para todos los contextos gráficos. Una vez obtenido el contexto gráfico podemos llamar desde este objeto a las funciones gráficas definidas en la clase Graphics. Graphics contiene información acerca de la zona que necesita ser redibujada: el objeto donde dibujar, un origen de traslación, el color actual, la fuente actual, etcétera. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 30
  • 31. Ejemplo de dibujo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 31
  • 32. Ejemplo de dibujo Cuando utilizamos el método paintComponent() para dibujar en un contexto gráfico g, ese contexto es un ejemplar de una subclase concreta de la clase Graphics para la plataforma específica. El método paintComponent() es llamado la primera vez y cada vez que es necesario redibujar el componente. Al hacer super.paintComponent(g) nos aseguramos de que el área visualizada se limpia antes de volver a dibujar. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 32
  • 33. Ejemplo de dibujo  Creación de un color RGB Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 33
  • 34. Algunos métodos de Graphics Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 34
  • 35. Interacción con el usuario Al interactuar con la aplicación, el usuario:  Acciona componentes (ActionEvent).  El usuario pulsa un botón.  El usuario termina de introducir un texto en un campo y presiona Intro.  El usuario selecciona un elemento de una lista pulsando el preferido (o de un menú).  Pulsa o suelta botones del ratón (MouseEvent).  Minimiza, cierra o manipula una ventana (WindowEvent).  Escribe con el teclado (KeyEvent).  Descubre porciones de ventanas (PaintEvent) Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 35
  • 36. Interacción con el usuario Cuando el usuario de un programa o applet mueve el ratón, presiona un pulsador o pulsa una tecla, genera un evento (actionEvent). Los eventos son objetos de ciertas clases. Normalmente un objeto de alguna subclase de EventObject que indica:  El elemento que accionó el usuario.  La identificación del evento que indica la naturaleza del evento.  La posición del ratón en el momento de la interacción.  Teclas adicionales pulsadas por el usuario, como la tecla  Control, la tecla de Cambio a mayúsculas, etcétera. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 36
  • 37. Acciones del usuario Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 37
  • 38. Modelo para responder a eventos Creamos un manejador de eventos en dos pasos: • ƒDefinimos una clase específica que haga de oyente de eventos y que implemente el método actionPerformed(). • Registramos un ejemplar como oyente de componentes: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 38
  • 39. Modelo para responder a eventos Se añade el oyente especificado (ejemplar de MiOyente) a la lista de oyentes para recibir eventos de acción (ActionEvent) desde ese componente. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 39
  • 40. Ejemplo: botón con pitido Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 40
  • 41. Ejemplo: reproducir un valor Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 41
  • 42. Ejemplo: reproducir un valor Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 42
  • 43. Ejemplo: contador de pulsaciones Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 43
  • 44. Ejemplo: cambio de color Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 44
  • 45. Ejemplo: cambio de color Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 45
  • 46. ActionEvent El objeto ActionEvent ofrece un método getActionCommand() que devuelve un objeto con la información sobre el origen del evento (el botón en nuestro caso). Con un botón, devuelve la etiqueta del botón. Para identificar botones individuales: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 46
  • 47. ActionEvent El método getSource() indica el objeto en el que se ha originado el evento: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 47
  • 48. Un conversor Euros-Pesetas Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 48
  • 49. Un conversor Euros-Pesetas La clase OyenteBoton es interna y tiene acceso a los elementos de la clase Contenedora Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 49
  • 50. Interfaces para procesar eventos Para facilitar la tarea del programador se han creado una serie de interfaces que deben implementarse cuando se quieren procesar algunos de estos eventos. Algunas interfaces y sus métodos son: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 50
  • 51. Interfaces para procesar eventos • JButton: Botón aislado. Puede pulsarse, pero su estado no cambia • „JToggleButton : Botón seleccionable. Cuando se pulsa el botón, su estado pasa a seleccionado, hasta que se pulsa de nuevo (entonces se deselecciona) o „isSelected() permite chequear su estado • „JCheckBox : Especialización de JToggleButton que implementa una casilla de verificación. Botón con estado interno, que cambia de apariencia de forma adecuada según si está o no está seleccionado • „JRadioButton: Especialización de JToggleButton que tiene sentido dentro de un mismo grupo de botones (ButtonGroup) que controla que sólamente uno de ellos está seleccionado Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 51
  • 52. Componentes : JButton • Constructores: JButton(String text) JButton(String text, Icon icon) JButton(Icon icon) • ƒ Respuesta a botones: o Implementar la interfaz ActionListener o Implementar el método actionPerformed(ActionEvent e) Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 52
  • 53. Ejemplos boton1 = new JButton("A Euros "); boton1.setIcon(new ImageIcon("flag1.gif")); boton2 = new JButton(new ImageIcon("flag2.gif")); boton3 = new JButton("Botón",new ImageIcon("flag8.gif")); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 53
  • 54. Componentes : JLabel Para texto, una imagen o ambos: JLabel(String text, int horizontalAlignment) JLabel(String text) JLabel(Icon icon) JLabel(Icon icon, int horizontalAlignment) eti1 = new JLabel("Etiqueta de texto..."); eti2 = new JLabel(new ImageIcon("flag8.gif")); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 54
  • 55. Componentes : JTextField Campos de texto para introducir caracteres: JTextField(int columns) JTextField(String text) JTextField(String text, int columns) JTextField text1 = new JTextField("hola", 10); Poner texto: text1.setText("Adios"); Obtener texto: String str = text1.getText(); Agregar al Panel: p1.add(text1); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 55
  • 56. Componentes : JComboBox Listas de elementos para seleccionar un solo valor: Creación: JComboBox ch1 = new JComboBox(); Agregar opciones: ch1.addItem(Object elemento); Registrar Evento: ch1.addItemListener( objeto); Obtener selección: val = ch1.getSelectedIndex(); ch1.getItem() Implementar la interfaz ItemListener Implementar el método itemStateChanged(ItemEvent e) ch1.addItemListener(new OyenteItem()); . . . class OyenteItem implements ItemListener { public void itemStateChanged(ItemEvent e) { ... } } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 56
  • 57. Componentes : JList Listas de elementos para seleccionar uno o varios valores: JList l1 = new JList(); JList l2 = new JList(Object[] elements); String[] cosas = {"Opción 1", "Opción 2", "Opción 3"}; Jlist l2 = new Jlist(cosas); Registrar evento: l2.addListSelectionListener(oyente); Obtener selección: int[] indices = l2.getSelectedIndices(); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 57
  • 58. Componentes : JList Implementar la interfaz ListSelectionListenner Implementar el método valueChanged(ListSelectionEvent e) l.addListSelectionListener(new OyenteLista()); ... class OyenteLista implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { int[] indices = l.getSelectedIndices(); int i; for(i = 0; i < indices.length; i++) { ... } } } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 58
  • 59. Componentes : JScrollBar Creación: bar1 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,100); Registrar evento: bar1.addAdjustmentListener(oyente); Implementar la interfaz AdjustmentListener Implementar el método adjustmentValueChanged(AdjustmentEvent e) bar1.addAdjustmentListener(new OyenteBarra()); ... class OyenteBarra implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent e) { ... } } Obtener valor: int val = bar1.getValue(); // val entre 0 y 100 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 59
  • 60. Componentes: JScrollBar y JComboBox Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 60
  • 61. Componentes: JScrollBar y JComboBox Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 61
  • 62. Componentes: JScrollBar y JComboBox Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 62
  • 63. Movimientos de ratón Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 63
  • 64. Pulsaciones de ratón Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 64
  • 65. Ejemplo de cuadro de mensaje Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 65
  • 66. Ejemplo de cuadro de opciones Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 66
  • 67. Ejemplo de cuadro de entrada de datos Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 67
  • 68. Ejemplo de cuadro de entrada de datos Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 68
  • 69. Menús Java ofrece varias clases para poner menús en una ventana: JMenuBar JMenu JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem Un JFrame o JApplet puede guardar un barra de menú donde se cuelgan menús desplegables. Los menús tienen elementos de menú que puede seleccionar el usuario. Las barras de menús se pueden contemplar como una estructura que soporta menús. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 69
  • 70. Menús Una ventana (frame) sólo puede tener una barra de menús (objeto MenuBar), que se sitúa en la parte de arriba del mismo. Los submenús son botones JMenu. Los elementos de los menús son botones JMenuItem. Cuando se activa un menú se despliegan automáticamente las opciones del menú. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 70
  • 71. Menús Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 71
  • 72. Ejemplo de menú Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 72
  • 73. Ejemplo de menú Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 73
  • 74. Ejemplo de menú Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 74
  • 75. Otro ejemplo Aplicación que permite realizar operaciones aritméticas. La interfaz contiene etiquetas y campos de texto para los operandos y el resultado. La operación se selecciona en el menú: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 75
  • 76. Otro ejemplo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 76
  • 77. Otro ejemplo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 77
  • 78. Otro ejemplo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 78
  • 79. Otro ejemplo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 79
  • 80. Clases adaptadoras ¡ Poco eficiente, sólo implementamos un método ! Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 80
  • 81. Clases adaptadoras Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 81
  • 82. Clases adaptadoras • Si por ejemplo una de nuestras clases implementa la interfaz WindowListener, deberá implementar todos los métodos sociados, aún cuando sólo utilicemos uno de ellos. • „Las clases adaptadoras se encargan de implementar todos los métodos del la clase de escucha. Así sólo necesitaremos redefinir aquellos métodos que nos van a ser útiles para gestionar eventos , sin preocuparnos del resto. • Para ello dedemos indicar que nuestra clase es una subclase del adaptador: class UnaClase extends Adaptador{ ... } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 82
  • 83. Clases adaptadoras class MiAdaptador extends WindowAdapter { public void windowClosing(windowEvent e) { System.exit(0); } } . . . this.addWindowListener(new MiAdaptador()); . . . Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 83
  • 84. Clases adaptadoras Sólo las clases que poseen más de un método tienen adaptador , y son las siguientes: ComponentListener posee ComponentAdapter ContainerListener posee ContainerAdapter FocusListener posee FocusAdapter KeyListener posee KeyAdapter MouseListener posee MouseAdapter MouseMotionListener posee MouseMotionAdapter WindowListener posee WindowAdapter Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 84
  • 85. Ejemplo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 85
  • 86. Arquitectura MVC (Modelo-Vista-Controlador) La arquitectura MVC es una arquitectura típica de diseño de GUI.  El modelo representa la estructura lógica de la GUI, independientemente de su representación visual.  La vista constituye la representación visual de la GUI.  El controlador constituye la lógica de interacción con el usuario. El mejor modelo separa en las tres partes: public static void main(String args[]) { Modelo modelo = new Modelo(); Controlador controlador = new Controlador(modelo); GUI gui = new GUI(controlador); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 86
  • 87. Applet mínimo con Swing (JApplet) Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 87
  • 88. Esquema de applet con swing Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 88
  • 89. Ejemplo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 89