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

Introducción a Swing
Introducción a SwingIntroducción a Swing
Introducción a Swingmrojas_unitec
 
Diagramas de despliegue
Diagramas de despliegueDiagramas de despliegue
Diagramas de desplieguegmjuan
 
Design Patterns - 01 Introduction and Decorator Pattern
Design Patterns - 01 Introduction and Decorator PatternDesign Patterns - 01 Introduction and Decorator Pattern
Design Patterns - 01 Introduction and Decorator Patterneprafulla
 
Diapositivas sobre AWT
Diapositivas sobre AWTDiapositivas sobre AWT
Diapositivas sobre AWTLaddy Mathita
 
Corel Draw X3 Texto
Corel Draw X3  TextoCorel Draw X3  Texto
Corel Draw X3 TextoAfrito Comix
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasAndoni Eguíluz Morán
 
Formularios y contenedores
Formularios y contenedoresFormularios y contenedores
Formularios y contenedoreszeta2015
 
React – ¿Qué es React.js?
React – ¿Qué es React.js?React – ¿Qué es React.js?
React – ¿Qué es React.js?Gorka Magaña
 
Rationalrose grupo12
Rationalrose grupo12Rationalrose grupo12
Rationalrose grupo12maku_pro
 
Lese 2 - introduccion a rational rose
Lese 2 - introduccion a rational roseLese 2 - introduccion a rational rose
Lese 2 - introduccion a rational rosejdpoccorie
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoMarvin Zumbado
 
Guia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSSGuia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSSlissette_torrealba
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de softwareMarcos Cerpa
 
5. Ejercicios normalización
5. Ejercicios normalización5. Ejercicios normalización
5. Ejercicios normalizaciónMarcelo Herrera
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UMLramirezjaime
 

La actualidad más candente (20)

Introducción a Swing
Introducción a SwingIntroducción a Swing
Introducción a Swing
 
Diagramas de despliegue
Diagramas de despliegueDiagramas de despliegue
Diagramas de despliegue
 
Componentes en-poo
Componentes en-pooComponentes en-poo
Componentes en-poo
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
Design Patterns - 01 Introduction and Decorator Pattern
Design Patterns - 01 Introduction and Decorator PatternDesign Patterns - 01 Introduction and Decorator Pattern
Design Patterns - 01 Introduction and Decorator Pattern
 
Diapositivas sobre AWT
Diapositivas sobre AWTDiapositivas sobre AWT
Diapositivas sobre AWT
 
Ejercicios uml
Ejercicios umlEjercicios uml
Ejercicios uml
 
Corel Draw X3 Texto
Corel Draw X3  TextoCorel Draw X3  Texto
Corel Draw X3 Texto
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 Ventanas
 
Formularios y contenedores
Formularios y contenedoresFormularios y contenedores
Formularios y contenedores
 
Java swing
Java swingJava swing
Java swing
 
React – ¿Qué es React.js?
React – ¿Qué es React.js?React – ¿Qué es React.js?
React – ¿Qué es React.js?
 
Rationalrose grupo12
Rationalrose grupo12Rationalrose grupo12
Rationalrose grupo12
 
Presentacion Patrones Creacionales
Presentacion Patrones CreacionalesPresentacion Patrones Creacionales
Presentacion Patrones Creacionales
 
Lese 2 - introduccion a rational rose
Lese 2 - introduccion a rational roseLese 2 - introduccion a rational rose
Lese 2 - introduccion a rational rose
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modelado
 
Guia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSSGuia Practica Maquetación HTML5, CSS
Guia Practica Maquetación HTML5, CSS
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
 
5. Ejercicios normalización
5. Ejercicios normalización5. Ejercicios normalización
5. Ejercicios normalización
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UML
 

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

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
 
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
 
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
 
Layout
LayoutLayout
Layout
 
Layout
LayoutLayout
Layout
 

Más de Jose Benítez Andrades

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

8.realizacion de pruebas
8.realizacion de pruebas8.realizacion de pruebas
8.realizacion de pruebas
 
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

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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
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
 
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
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
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
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Último (15)

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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
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
 
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
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
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
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

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