SlideShare una empresa de Scribd logo
1 de 89
Descargar para leer sin conexión
Desarrollo de interfaces:
1.Interfaces de Usuario (Componentes,
Eventos, Escuchadores… )
Jose Alberto Benítez Andrades
jose@indipro.es
www.indipro.es
@indiproweb
@jabenitez88
1Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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).
2Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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
3Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Componentes Swing
4Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
5Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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, ...
6Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Jerarquía de clases para las GUI: JComponent
7Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Jerarquía de clases para las GUI: JComponent
8Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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)
9Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
10Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Contenedores
11Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Jerarquía
Contenedor
alto-nivel
JFrame
Content
Pane
JLabel
Menu Bar
12Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Jerarquía
13Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Jerarquía
14Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Añadir elementos
15Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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);
1. Con herencia de JFrame utilizando Container
16Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
2. Con herencia de JFrame sin Container
17Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
3. Ejemplo sin herencia con Container
18Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
4. Ejemplo sin herencia sin Container
19Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Administradores de disposición
20Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
Administradores de disposición
21Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
Administradores de disposición
22Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
BorderLayout organiza el
contenedor en 5 zonas:
FlowLayout coloca los componentes de
izquierda a derecha y de arriba hacia
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().
FlowLayout
23Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
BorderLayout
24Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
GridLayout
25Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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)));
}
GridLayout
26Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Paneles como contenedores
27Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
Paneles como contenedores
28Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Paneles como contenedores
29Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Dibujo de gráficos en paneles
30Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
Ejemplo de dibujo
31Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de dibujo
32Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
Ejemplo de dibujo
33Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
 Creación de un color RGB
Algunos métodos de Graphics
34Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Interacción con el usuario
35Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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)
Interacción con el usuario
36Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
Acciones del usuario
37Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Modelo para responder a eventos
38Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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:
Modelo para responder a eventos
39Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Se añade el oyente especificado (ejemplar de MiOyente) a la lista de
oyentes para recibir eventos de acción (ActionEvent) desde ese
componente.
Ejemplo: botón con pitido
40Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo: reproducir un valor
41Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo: reproducir un valor
42Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo: contador de pulsaciones
43Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo: cambio de color
44Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo: cambio de color
45Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
ActionEvent
46Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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:
ActionEvent
47Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
El método getSource() indica el objeto en el que se ha
originado el evento:
Un conversor Euros-Pesetas
48Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Un conversor Euros-Pesetas
49Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
La clase OyenteBoton es
interna y tiene acceso a
los elementos de la clase
Contenedora
Interfaces para procesar eventos
50Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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:
Interfaces para procesar eventos
51Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
• 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
Componentes : JButton
52Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
• 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)
Ejemplos
53Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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"));
Componentes : JLabel
54Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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"));
Componentes : JTextField
55Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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);
Componentes : JComboBox
56Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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) {
...
}
}
Componentes : JList
57Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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();
Componentes : JList
58Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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++) {
...
}
}
}
Componentes : JScrollBar
59Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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
Componentes: JScrollBar y JComboBox
60Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Componentes: JScrollBar y JComboBox
61Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Componentes: JScrollBar y JComboBox
62Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Movimientos de ratón
63Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Pulsaciones de ratón
64Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de cuadro de mensaje
65Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de cuadro de opciones
66Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de cuadro de entrada de datos
67Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de cuadro de entrada de datos
68Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Menús
69Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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.
Menús
70Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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ú.
Menús
71Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de menú
72Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de menú
73Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo de menú
74Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Otro ejemplo
75Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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ú:
Otro ejemplo
76Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Otro ejemplo
77Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Otro ejemplo
78Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Otro ejemplo
79Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Clases adaptadoras
80Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
¡ Poco eficiente, sólo implementamos un método !
Clases adaptadoras
81Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Clases adaptadoras
82Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
• 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{ ... }
Clases adaptadoras
83Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
class MiAdaptador extends WindowAdapter {
public void windowClosing(windowEvent e) {
System.exit(0);
}
}
. . .
this.addWindowListener(new MiAdaptador());
. . .
Clases adaptadoras
84Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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
Ejemplo
85Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Arquitectura MVC (Modelo-Vista-Controlador)
86Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
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); }
Applet mínimo con Swing (JApplet)
87Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Esquema de applet con swing
88Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
Ejemplo
89Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88

Más contenido relacionado

La actualidad más candente (20)

App inventor
App inventorApp inventor
App inventor
 
Programacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_IProgramacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_I
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Grafica 2
Grafica 2Grafica 2
Grafica 2
 
Ilustrator cs4
Ilustrator cs4Ilustrator cs4
Ilustrator cs4
 
Practica5
Practica5Practica5
Practica5
 
Macros test de seleccion multiple
Macros    test de seleccion multipleMacros    test de seleccion multiple
Macros test de seleccion multiple
 
manual vector works v11
manual vector works v11manual vector works v11
manual vector works v11
 
Tutorial vectorworks
Tutorial vectorworksTutorial vectorworks
Tutorial vectorworks
 
Fun_02_estructura_programa
Fun_02_estructura_programaFun_02_estructura_programa
Fun_02_estructura_programa
 
Visual Basic 6.0
Visual Basic 6.0Visual Basic 6.0
Visual Basic 6.0
 
Practicasbasicasparaandroid 120112060404-phpapp02
Practicasbasicasparaandroid 120112060404-phpapp02Practicasbasicasparaandroid 120112060404-phpapp02
Practicasbasicasparaandroid 120112060404-phpapp02
 
Ejercicios app inventor
Ejercicios app inventorEjercicios app inventor
Ejercicios app inventor
 
Prueba de evaluación CAD
Prueba de evaluación CADPrueba de evaluación CAD
Prueba de evaluación CAD
 
Corel Draw X3 Intro
Corel Draw X3 IntroCorel Draw X3 Intro
Corel Draw X3 Intro
 
Adobe illustrator (ai)
Adobe illustrator (ai)Adobe illustrator (ai)
Adobe illustrator (ai)
 
Práctica 1 estudiante
Práctica 1 estudiantePráctica 1 estudiante
Práctica 1 estudiante
 
2
22
2
 
Adobe Illustrator
Adobe IllustratorAdobe Illustrator
Adobe Illustrator
 
Apuntes de prácticas de DERIVE
Apuntes de prácticas de DERIVEApuntes de prácticas de DERIVE
Apuntes de prácticas de DERIVE
 

Similar a Swing 121012064634-phpapp01

Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposciciónAndy Bsc
 
Manual aplicaciones mobiles
Manual aplicaciones mobilesManual aplicaciones mobiles
Manual aplicaciones mobilesJuan Strongman
 
DIAPOSITIVA - GUIDE.pptx-----------------------------
DIAPOSITIVA - GUIDE.pptx-----------------------------DIAPOSITIVA - GUIDE.pptx-----------------------------
DIAPOSITIVA - GUIDE.pptx-----------------------------jorgejvc777
 
Sesión5 applets
Sesión5 appletsSesión5 applets
Sesión5 appletsUniversidad
 
Presentación de visual studio (1)
Presentación de visual studio (1)Presentación de visual studio (1)
Presentación de visual studio (1)cinthya alfaro
 
Empezando con las librerías gráficas de microchip
Empezando  con las librerías gráficas de  microchipEmpezando  con las librerías gráficas de  microchip
Empezando con las librerías gráficas de microchipBiblioman Aquihayapuntes
 
Gu is awt_swing
Gu is awt_swingGu is awt_swing
Gu is awt_swingLCA
 
002-ProgramacionGraficaQt.pdf
002-ProgramacionGraficaQt.pdf002-ProgramacionGraficaQt.pdf
002-ProgramacionGraficaQt.pdfkv02th
 
Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)LuisSlz
 
Objetivo interfas a codigo
Objetivo interfas a codigoObjetivo interfas a codigo
Objetivo interfas a codigoRobert Wolf
 
Manual gui net_beans
Manual gui net_beansManual gui net_beans
Manual gui net_beansYefry Coz
 
Tutorial 1 android
Tutorial 1 androidTutorial 1 android
Tutorial 1 androidlibidinosa
 
Practicas de Visual Basic 6
Practicas de Visual Basic 6Practicas de Visual Basic 6
Practicas de Visual Basic 6Brenda Roque
 

Similar a Swing 121012064634-phpapp01 (20)

Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
 
Introduccion a awt
Introduccion a awtIntroduccion a awt
Introduccion a awt
 
Manual aplicaciones mobiles
Manual aplicaciones mobilesManual aplicaciones mobiles
Manual aplicaciones mobiles
 
DIAPOSITIVA - GUIDE.pptx-----------------------------
DIAPOSITIVA - GUIDE.pptx-----------------------------DIAPOSITIVA - GUIDE.pptx-----------------------------
DIAPOSITIVA - GUIDE.pptx-----------------------------
 
Creacion de-proyectos-vb-net-2010
Creacion de-proyectos-vb-net-2010Creacion de-proyectos-vb-net-2010
Creacion de-proyectos-vb-net-2010
 
Mobilessss
MobilessssMobilessss
Mobilessss
 
Sesión5 applets
Sesión5 appletsSesión5 applets
Sesión5 applets
 
Presentación de visual studio (1)
Presentación de visual studio (1)Presentación de visual studio (1)
Presentación de visual studio (1)
 
Empezando con las librerías gráficas de microchip
Empezando  con las librerías gráficas de  microchipEmpezando  con las librerías gráficas de  microchip
Empezando con las librerías gráficas de microchip
 
Gu is awt_swing
Gu is awt_swingGu is awt_swing
Gu is awt_swing
 
002-ProgramacionGraficaQt.pdf
002-ProgramacionGraficaQt.pdf002-ProgramacionGraficaQt.pdf
002-ProgramacionGraficaQt.pdf
 
Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)
 
Objetivo interfas a codigo
Objetivo interfas a codigoObjetivo interfas a codigo
Objetivo interfas a codigo
 
Manual gui net_beans
Manual gui net_beansManual gui net_beans
Manual gui net_beans
 
Manual p se int
Manual p se intManual p se int
Manual p se int
 
Manual p se int
Manual p se intManual p se int
Manual p se int
 
Manual p se int (1)
Manual p se int (1)Manual p se int (1)
Manual p se int (1)
 
Programacion_II_04_disposicion_contenedores
Programacion_II_04_disposicion_contenedoresProgramacion_II_04_disposicion_contenedores
Programacion_II_04_disposicion_contenedores
 
Tutorial 1 android
Tutorial 1 androidTutorial 1 android
Tutorial 1 android
 
Practicas de Visual Basic 6
Practicas de Visual Basic 6Practicas de Visual Basic 6
Practicas de Visual Basic 6
 

Más de Ricardo Garcia

Más de Ricardo Garcia (18)

Swing
SwingSwing
Swing
 
Sobrecarga de datos
Sobrecarga de datosSobrecarga de datos
Sobrecarga de datos
 
Slides p3 2
Slides p3 2Slides p3 2
Slides p3 2
 
Registro plataforma chamilo
Registro plataforma chamiloRegistro plataforma chamilo
Registro plataforma chamilo
 
Otro poo
Otro pooOtro poo
Otro poo
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01
 
Metodos en java
Metodos en javaMetodos en java
Metodos en java
 
Metodologia
MetodologiaMetodologia
Metodologia
 
La clase string
La clase stringLa clase string
La clase string
 
Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892
 
Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01
 
Java awt tutorial javatpoint
Java awt tutorial   javatpointJava awt tutorial   javatpoint
Java awt tutorial javatpoint
 
Introduccion orientaciona objetos
Introduccion orientaciona objetosIntroduccion orientaciona objetos
Introduccion orientaciona objetos
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_
 
Fundamentos programacion poo
Fundamentos programacion pooFundamentos programacion poo
Fundamentos programacion poo
 
Diagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetosDiagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetos
 
08. java con my sql
08. java con my sql08. java con my sql
08. java con my sql
 
07. arreglos
07. arreglos07. arreglos
07. arreglos
 

Swing 121012064634-phpapp01

  • 1. Desarrollo de interfaces: 1.Interfaces de Usuario (Componentes, Eventos, Escuchadores… ) Jose Alberto Benítez Andrades jose@indipro.es www.indipro.es @indiproweb @jabenitez88 1Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 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). 2Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 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 3Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 4. Componentes Swing 4Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 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. 5Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 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, ... 6Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 7. Jerarquía de clases para las GUI: JComponent 7Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 8. Jerarquía de clases para las GUI: JComponent 8Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 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) 9Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 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. 10Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 11. Contenedores 11Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 12. Jerarquía Contenedor alto-nivel JFrame Content Pane JLabel Menu Bar 12Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 13. Jerarquía 13Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 14. Jerarquía 14Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 15. Añadir elementos 15Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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);
  • 16. 1. Con herencia de JFrame utilizando Container 16Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 17. 2. Con herencia de JFrame sin Container 17Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 18. 3. Ejemplo sin herencia con Container 18Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 19. 4. Ejemplo sin herencia sin Container 19Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 20. Administradores de disposición 20Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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.
  • 21. Administradores de disposición 21Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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.
  • 22. Administradores de disposición 22Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 BorderLayout organiza el contenedor en 5 zonas: FlowLayout coloca los componentes de izquierda a derecha y de arriba hacia 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().
  • 23. FlowLayout 23Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 24. BorderLayout 24Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 25. GridLayout 25Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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))); }
  • 26. GridLayout 26Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 27. Paneles como contenedores 27Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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.
  • 28. Paneles como contenedores 28Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 29. Paneles como contenedores 29Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 30. Dibujo de gráficos en paneles 30Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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.
  • 31. Ejemplo de dibujo 31Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 32. Ejemplo de dibujo 32Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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.
  • 33. Ejemplo de dibujo 33Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88  Creación de un color RGB
  • 34. Algunos métodos de Graphics 34Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 35. Interacción con el usuario 35Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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)
  • 36. Interacción con el usuario 36Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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.
  • 37. Acciones del usuario 37Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 38. Modelo para responder a eventos 38Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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:
  • 39. Modelo para responder a eventos 39Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 Se añade el oyente especificado (ejemplar de MiOyente) a la lista de oyentes para recibir eventos de acción (ActionEvent) desde ese componente.
  • 40. Ejemplo: botón con pitido 40Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 41. Ejemplo: reproducir un valor 41Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 42. Ejemplo: reproducir un valor 42Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 43. Ejemplo: contador de pulsaciones 43Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 44. Ejemplo: cambio de color 44Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 45. Ejemplo: cambio de color 45Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 46. ActionEvent 46Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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:
  • 47. ActionEvent 47Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 El método getSource() indica el objeto en el que se ha originado el evento:
  • 48. Un conversor Euros-Pesetas 48Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 49. Un conversor Euros-Pesetas 49Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 La clase OyenteBoton es interna y tiene acceso a los elementos de la clase Contenedora
  • 50. Interfaces para procesar eventos 50Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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:
  • 51. Interfaces para procesar eventos 51Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 • 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
  • 52. Componentes : JButton 52Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 • 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)
  • 53. Ejemplos 53Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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"));
  • 54. Componentes : JLabel 54Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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"));
  • 55. Componentes : JTextField 55Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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);
  • 56. Componentes : JComboBox 56Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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) { ... } }
  • 57. Componentes : JList 57Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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();
  • 58. Componentes : JList 58Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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++) { ... } } }
  • 59. Componentes : JScrollBar 59Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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
  • 60. Componentes: JScrollBar y JComboBox 60Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 61. Componentes: JScrollBar y JComboBox 61Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 62. Componentes: JScrollBar y JComboBox 62Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 63. Movimientos de ratón 63Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 64. Pulsaciones de ratón 64Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 65. Ejemplo de cuadro de mensaje 65Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 66. Ejemplo de cuadro de opciones 66Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 67. Ejemplo de cuadro de entrada de datos 67Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 68. Ejemplo de cuadro de entrada de datos 68Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 69. Menús 69Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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.
  • 70. Menús 70Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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ú.
  • 71. Menús 71Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 72. Ejemplo de menú 72Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 73. Ejemplo de menú 73Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 74. Ejemplo de menú 74Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 75. Otro ejemplo 75Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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ú:
  • 76. Otro ejemplo 76Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 77. Otro ejemplo 77Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 78. Otro ejemplo 78Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 79. Otro ejemplo 79Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 80. Clases adaptadoras 80Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 ¡ Poco eficiente, sólo implementamos un método !
  • 81. Clases adaptadoras 81Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 82. Clases adaptadoras 82Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 • 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{ ... }
  • 83. Clases adaptadoras 83Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 class MiAdaptador extends WindowAdapter { public void windowClosing(windowEvent e) { System.exit(0); } } . . . this.addWindowListener(new MiAdaptador()); . . .
  • 84. Clases adaptadoras 84Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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
  • 85. Ejemplo 85Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 86. Arquitectura MVC (Modelo-Vista-Controlador) 86Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 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); }
  • 87. Applet mínimo con Swing (JApplet) 87Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 88. Esquema de applet con swing 88Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88
  • 89. Ejemplo 89Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88