SlideShare a Scribd company logo
1 of 89
Jose Alberto Benítez Andrades 
jose@indipro.es 
www.indipro.es 
@indiproweb 
@jabenitez88 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
1 
Desarrollo de interfaces: 
1.Interfaces de Usuario (Componentes, 
Eventos, Escuchadores… )
 MVC (Modelo Vista Controlador) ( separa los 
datos de una aplicación, la interfaz de usuario y 
la lógica de control en tres capas distintas). 
 el modelo (que contiene la gestión de los datos y 
la lógica de negocios), la vista (se ocupa de la 
aparición de los componentes de la interfaz de 
usuario en pantalla) y el controlador (que 
gestiona los eventos de entrada generados en la 
vista). 
Jose Alberto Benítez – jose@indipro.es - 
2 @indiproweb
Swing 
3 
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).
Swing 
4 
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
Componentes Swing 
5
Jerarquía de clases para las GUI 
6 
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.
Jerarquía de clases para las GUI 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
7 
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, ...
Jerarquía de clases para las GUI: JComponent 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
8
Jerarquía de clases para las GUI: JComponent 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
9
Jerarquía de componentes 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
10 
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)
Contenedores 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
11 
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.
Contenedores 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
12
Jerarquía 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
13 
Contenedor 
alto-nivel 
JFrame 
Content 
Pane 
JLabel 
Menu Bar
Jerarquía 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
14
Jerarquía 
15
16
2. Con herencia de JFrame sin Container 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
20 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
21 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
22 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
23
BorderLayout 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
24
GridLayout 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
25 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
26
Paneles como contenedores 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
27 
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 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
30 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
31
Ejemplo de dibujo 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
32 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
33 
 Creación de un color RGB
Algunos métodos de Graphics 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
34
Interacción con el usuario 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
35 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
36 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
37
Modelo para responder a eventos 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
38 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
39 
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 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
46 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
47 
El método getSource() indica el objeto en el que se ha 
originado el evento:
Un conversor Euros-Pesetas 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
48
Un conversor Euros-Pesetas 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
49 
La clase OyenteBoton es 
interna y tiene acceso a 
los elementos de la 
clase Contenedora
Interfaces para procesar eventos 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
50 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
51 
 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) 
 „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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
52 
 Constructores: 
JButton(String text) 
JButton(String text, Icon icon) 
JButton(Icon icon) 
 ƒ Respuesta a botones: 
 Implementar la interfaz ActionListener 
 Implementar el método actionPerformed(ActionEvent e)
Ejemplos 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
53 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
54 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
55 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
56 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
57 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
58 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
59 
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 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
69 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
70 
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 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
75 
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 
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 
Jose Alberto Benítez Andrades– jose@indipro.es - 
@jabenitez88 
80 
¡ Poco eficiente, sólo implementamos un método !
Clases adaptadoras 
81
Clases adaptadoras 
82 
 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 
83 
class MiAdaptador extends WindowAdapter { 
public void windowClosing(windowEvent e) { 
System.exit(0); 
} 
} 
. . . 
this.addWindowListener(new MiAdaptador()); 
. . .
Clases adaptadoras 
84 
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 
85
Arquitectura MVC (Modelo-Vista-Controlador) 
86 
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) 
87
Esquema de applet con swing 
88
Ejemplo 
89

More Related Content

What's hot

Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeans
Emerson Garay
 
Swing
SwingSwing
Swing
EPN
 
Tutorial flexsim en español lección 2 - la milla extra
Tutorial flexsim en español   lección 2 - la milla extraTutorial flexsim en español   lección 2 - la milla extra
Tutorial flexsim en español lección 2 - la milla extra
De Fieston
 
Gu is awt_swing
Gu is awt_swingGu is awt_swing
Gu is awt_swing
LCA
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
Laura
 

What's hot (20)

Graficas matlab
Graficas matlabGraficas matlab
Graficas matlab
 
2012 interfaz grafica en guide matlab
2012 interfaz grafica en guide matlab2012 interfaz grafica en guide matlab
2012 interfaz grafica en guide matlab
 
Introducción a Swing
Introducción a SwingIntroducción a Swing
Introducción a Swing
 
Interfaz grafica matlab
Interfaz grafica matlabInterfaz grafica matlab
Interfaz grafica matlab
 
Guide
GuideGuide
Guide
 
Matlab
MatlabMatlab
Matlab
 
Sesion12-componentes Visuales java
Sesion12-componentes Visuales javaSesion12-componentes Visuales java
Sesion12-componentes Visuales java
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanas
 
Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeans
 
Fun_02_estructura_programa
Fun_02_estructura_programaFun_02_estructura_programa
Fun_02_estructura_programa
 
GUI EN MATLAB MODULACION PULSO UNICO
GUI EN MATLAB MODULACION PULSO UNICOGUI EN MATLAB MODULACION PULSO UNICO
GUI EN MATLAB MODULACION PULSO UNICO
 
Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)
 
Swing1
Swing1Swing1
Swing1
 
Swing
SwingSwing
Swing
 
interfaz grafica
interfaz graficainterfaz grafica
interfaz grafica
 
Tutorial flexsim en español lección 2 - la milla extra
Tutorial flexsim en español   lección 2 - la milla extraTutorial flexsim en español   lección 2 - la milla extra
Tutorial flexsim en español lección 2 - la milla extra
 
Sesion12-Componentes AWT
Sesion12-Componentes AWTSesion12-Componentes AWT
Sesion12-Componentes AWT
 
2
22
2
 
Gu is awt_swing
Gu is awt_swingGu is awt_swing
Gu is awt_swing
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 

Similar to Swing intefaz grafica de usuario

Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
Andy Bsc
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVA
ale8819
 
abstract window tool kit
abstract window tool kitabstract window tool kit
abstract window tool kit
jent46
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
Milaly
 
Visual basic
Visual basicVisual basic
Visual basic
josser96
 

Similar to Swing intefaz grafica de usuario (20)

Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
 
Programacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_IProgramacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_I
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
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
 
Vbr Awt 01
Vbr Awt 01Vbr Awt 01
Vbr Awt 01
 
Programacion_II_04_disposicion_contenedores
Programacion_II_04_disposicion_contenedoresProgramacion_II_04_disposicion_contenedores
Programacion_II_04_disposicion_contenedores
 
Labo 2
Labo 2Labo 2
Labo 2
 
Layout
LayoutLayout
Layout
 
Layout
LayoutLayout
Layout
 
Entorno gráfico en Java
Entorno gráfico en JavaEntorno gráfico en Java
Entorno gráfico en Java
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVA
 
abstract window tool kit
abstract window tool kitabstract window tool kit
abstract window tool kit
 
Entorno grafico en Java
Entorno grafico en JavaEntorno grafico en Java
Entorno grafico en Java
 
Presentacion de dictar clase de gui
Presentacion de dictar clase de guiPresentacion de dictar clase de gui
Presentacion de dictar clase de gui
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
Matlab
MatlabMatlab
Matlab
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
Visual basic
Visual basicVisual basic
Visual basic
 
Creacion de-proyectos-vb-net-2010
Creacion de-proyectos-vb-net-2010Creacion de-proyectos-vb-net-2010
Creacion de-proyectos-vb-net-2010
 

More from Carlos Anibal Riascos Hurtado

More from Carlos Anibal Riascos Hurtado (20)

introducción ingeniería de software
introducción  ingeniería de  softwareintroducción  ingeniería de  software
introducción ingeniería de software
 
Lluvia de ideas
Lluvia  de ideasLluvia  de ideas
Lluvia de ideas
 
Prototipo en papel
Prototipo en papelPrototipo en papel
Prototipo en papel
 
Explorar para investigar primera sesion
Explorar para investigar primera sesionExplorar para investigar primera sesion
Explorar para investigar primera sesion
 
Sistemas de informacion gerencial
Sistemas de informacion gerencialSistemas de informacion gerencial
Sistemas de informacion gerencial
 
Ingeniería de requisitos
Ingeniería de requisitosIngeniería de requisitos
Ingeniería de requisitos
 
Cuerta sesion investigacion ciencia y tecnologia
Cuerta sesion investigacion ciencia y tecnologiaCuerta sesion investigacion ciencia y tecnologia
Cuerta sesion investigacion ciencia y tecnologia
 
Segunda sesion ciencia-investigacion-metodo
Segunda sesion ciencia-investigacion-metodoSegunda sesion ciencia-investigacion-metodo
Segunda sesion ciencia-investigacion-metodo
 
Conducta de entrada 2016
Conducta de entrada 2016Conducta de entrada 2016
Conducta de entrada 2016
 
Tecnologia e informatica 2016
Tecnologia e informatica   2016Tecnologia e informatica   2016
Tecnologia e informatica 2016
 
Librerias java
Librerias javaLibrerias java
Librerias java
 
Guia del trabajo con excepciones
Guia del trabajo con excepcionesGuia del trabajo con excepciones
Guia del trabajo con excepciones
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Hilos – threads en java
Hilos – threads   en javaHilos – threads   en java
Hilos – threads en java
 
Guia funciones estadisticas
Guia funciones estadisticasGuia funciones estadisticas
Guia funciones estadisticas
 
Proyecto final de semestre
Proyecto final de semestreProyecto final de semestre
Proyecto final de semestre
 
Menejo de eventos en java introduccion
Menejo de eventos en java introduccionMenejo de eventos en java introduccion
Menejo de eventos en java introduccion
 
Primer taller del segundo parcial sistemas aplicados
Primer taller del segundo parcial sistemas aplicadosPrimer taller del segundo parcial sistemas aplicados
Primer taller del segundo parcial sistemas aplicados
 
Public class implmusiempres implements musica
Public class implmusiempres implements musicaPublic class implmusiempres implements musica
Public class implmusiempres implements musica
 

Recently uploaded

6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
Wilian24
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
NadiaMartnez11
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
jlorentemartos
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
RigoTito
 

Recently uploaded (20)

6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración Ambiental
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
Diapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundariaDiapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundaria
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 

Swing intefaz grafica de usuario

  • 1. Jose Alberto Benítez Andrades jose@indipro.es www.indipro.es @indiproweb @jabenitez88 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 1 Desarrollo de interfaces: 1.Interfaces de Usuario (Componentes, Eventos, Escuchadores… )
  • 2.  MVC (Modelo Vista Controlador) ( separa los datos de una aplicación, la interfaz de usuario y la lógica de control en tres capas distintas).  el modelo (que contiene la gestión de los datos y la lógica de negocios), la vista (se ocupa de la aparición de los componentes de la interfaz de usuario en pantalla) y el controlador (que gestiona los eventos de entrada generados en la vista). Jose Alberto Benítez – jose@indipro.es - 2 @indiproweb
  • 3. Swing 3 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).
  • 4. Swing 4 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
  • 6. Jerarquía de clases para las GUI 6 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.
  • 7. Jerarquía de clases para las GUI Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 7 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, ...
  • 8. Jerarquía de clases para las GUI: JComponent Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 8
  • 9. Jerarquía de clases para las GUI: JComponent Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 9
  • 10. Jerarquía de componentes Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 10 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)
  • 11. Contenedores Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 11 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.
  • 12. Contenedores Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 12
  • 13. Jerarquía Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 13 Contenedor alto-nivel JFrame Content Pane JLabel Menu Bar
  • 14. Jerarquía Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 14
  • 16. 16
  • 17. 2. Con herencia de JFrame sin Container 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 20 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 21 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 22 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 23
  • 24. BorderLayout Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 24
  • 25. GridLayout Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 25 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 26
  • 27. Paneles como contenedores Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 27 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 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 30 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 31
  • 32. Ejemplo de dibujo Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 32 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 33  Creación de un color RGB
  • 34. Algunos métodos de Graphics Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 34
  • 35. Interacción con el usuario Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 35 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 36 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 37
  • 38. Modelo para responder a eventos Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 38 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 39 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 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 46 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 47 El método getSource() indica el objeto en el que se ha originado el evento:
  • 48. Un conversor Euros-Pesetas Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 48
  • 49. Un conversor Euros-Pesetas Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 49 La clase OyenteBoton es interna y tiene acceso a los elementos de la clase Contenedora
  • 50. Interfaces para procesar eventos Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 50 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 51  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)  „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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 52  Constructores: JButton(String text) JButton(String text, Icon icon) JButton(Icon icon)  ƒ Respuesta a botones:  Implementar la interfaz ActionListener  Implementar el método actionPerformed(ActionEvent e)
  • 53. Ejemplos Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 53 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 54 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 55 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 56 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 57 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 58 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 59 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 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 69 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 70 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 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 75 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 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 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 80 ¡ Poco eficiente, sólo implementamos un método !
  • 82. Clases adaptadoras 82  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 83 class MiAdaptador extends WindowAdapter { public void windowClosing(windowEvent e) { System.exit(0); } } . . . this.addWindowListener(new MiAdaptador()); . . .
  • 84. Clases adaptadoras 84 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
  • 86. Arquitectura MVC (Modelo-Vista-Controlador) 86 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) 87
  • 88. Esquema de applet con swing 88