Interfaces gráficas con
Swing
Java y Servicios Web I
Master en Ingeniería Matemática
Manuel Montenegro
Dpto. Sistemas Informáticos y Computación
Desp. 467 (Mat)
[email protected]
Introducción
● Swing es una biblioteca de interfaces gráficas de
usuario (GUI) para Java.
● Viene incluida con el entorno de desarrollo de Java
(JDK).
● Extiende a otra librería gráfica más antigua
llamada AWT.
● Paquetes:
● javax.swing
● java.awt
● java.awt.event
● Alternativas: SWT (http://www.eclipse.org/swt/)
28/Mayo/2012
8. Interfaces gráficas con Swing
2
Contenidos
● Ventanas
● Componentes
● Layout Managers
● Manejo de eventos
● Cuadros de diálogo predefinidos
● Dibujo de gráficos
● Arquitectura MVC
28/Mayo/2012
8. Interfaces gráficas con Swing
3
Creación de ventanas
● La clase JFrame proporciona operaciones para
manipular ventanas.
● Constructores:
● JFrame()
● JFrame(String titulo)
● Una vez creado el objeto de ventana, hay que:
● Establecer su tamaño.
● Establecer la acción de cierre.
● Hacerla visible.
28/Mayo/2012
8. Interfaces gráficas con Swing
4
Creación de ventanas
import javax.swing.*;
public class VentanaTest {
public static void main(String[] args) {
JFrame f = new JFrame("Titulo de ventana");
f.setSize(400, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
● Acciones de cierre:
● JFrame.EXIT_ON_CLOSE: Abandona aplicación.
● JFrame.DISPOSE_ON_CLOSE: Libera los recursos asociados a la ventana.
● JFrame.DO_NOTHING_ON_CLOSE: No hace nada.
● JFrame.HIDE_ON_CLOSE: Cierra la ventana, sin liberar sus recursos.
28/Mayo/2012
8. Interfaces gráficas con Swing
5
Creación de ventanas
28/Mayo/2012
8. Interfaces gráficas con Swing
6
Creación de ventanas
● Es usual extender la clase JFrame, y realizar las
operaciones de inicialización en su constructor.
public class MiVentana extends JFrame {
public MiVentana() {
super("Titulo de ventana");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class VentanaTest {
public static void main(String[] args) {
MiVentana v = new MiVentana();
v.setVisible(true);
}
}
28/Mayo/2012
8. Interfaces gráficas con Swing
7
Contenidos
● Ventanas
● Componentes
● Layout Managers
● Manejo de eventos
● Cuadros de diálogo predefinidos
● Dibujo de gráficos
● Arquitectura MVC
28/Mayo/2012
8. Interfaces gráficas con Swing
8
Componentes de una ventana
JButton
JLabel
JTextField
JCheckBox
JRadioButton
● Tras crear uno de estos componentes con new, ha de
añadirse al contentPane de la ventana
correspondiente mediante su método add.
28/Mayo/2012
8. Interfaces gráficas con Swing
9
Añadir componentes
public class MiVentana extends JFrame {
public MiVentana() {
super("Titulo de ventana");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
JLabel etiqueta = new JLabel("Nombre: ");
JTextField texto = new JTextField(20);
JButton boton = new JButton("Saludar");
cp.add(etiqueta);
cp.add(texto);
cp.add(boton);
}
}
28/Mayo/2012
8. Interfaces gráficas con Swing
10
Añadir componentes
28/Mayo/2012
8. Interfaces gráficas con Swing
11
Contenidos
● Ventanas
● Componentes
● Layout Managers
● Manejo de eventos
● Cuadros de diálogo predefinidos
● Dibujo de gráficos
● Arquitectura MVC
28/Mayo/2012
8. Interfaces gráficas con Swing
12
Layout Managers
● En Java no es habitual indicar explícitamente la posición
de los componentes de la interfaz dentro de la ventana.
● Los layout managers se encargan de colocar los
componentes de la interfaz de usuario en la ventana
contenedora.
● Especifican la posición y el tamaño de dichos
componentes.
● FlowLayout
● GridLayout
● BorderLayout
● GridBagLayout
● …
28/Mayo/2012
8. Interfaces gráficas con Swing
13
FlowLayout
● Coloca los elementos uno a continuación de otro,
de manera similar a la colocación de palabras en
un procesador de textos.
● Métodos:
● setAligment(int alineacion)
● setHgap(int separacion)
● setVgap(int separacion)
28/Mayo/2012
8. Interfaces gráficas con Swing
14
GridLayout
● Coloca los componentes de la interfaz en
forma de rejilla.
● El orden en que se añadan los componentes
determina su posición en la rejilla.
● Constructor:
● GridLayout(int filas, int columnas)
● Métodos:
● setHgap(int separacion)
● setVgap(int separacion)
28/Mayo/2012
8. Interfaces gráficas con Swing
15
GridLayout
public class MiVentana2 extends JFrame {
public MiVentana2() {
super("Titulo de ventana");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = getContentPane();
GridLayout gl = new GridLayout(4,3);
gl.setHgap(5); gl.setVgap(5);
cp.setLayout(gl);
for(int i = 1; i <= 9; i++) {
cp.add(new JButton(String.valueOf(i)));
}
cp.add(new JButton("*"));
cp.add(new JButton("0"));
cp.add(new JButton("#"));
}
}
28/Mayo/2012
8. Interfaces gráficas con Swing
16
GridLayout
28/Mayo/2012
8. Interfaces gráficas con Swing
17
BorderLayout
● Coloca y cambia de tamaño sus componentes
para que se ajusten a los bordes y parte
central de la ventana.
● Métodos:
● setHgap(int separacion)
● setVgap(int separacion)
● Al añadir un elemento a la
ventana, hay que especificar
su colocación:
JButton b = new JButton(...);
getContentPane().add(b, BorderLayout.EAST)
28/Mayo/2012
8. Interfaces gráficas con Swing
18
Interfaces complejas: JPanel
● Un panel es un componente con un layout
manager propio, y que puede contener varios
componentes en su interior.
● Constructor:
● JPanel()
● Métodos:
● void setLayout(LayoutManager lm)
● void add(JComponent componente)
● …
28/Mayo/2012
8. Interfaces gráficas con Swing
19
Interfaces complejas: JPanel
28/Mayo/2012
8. Interfaces gráficas con Swing
20
Interfaces complejas: JPanel
GridLayout
FlowLayout
FlowLayout
28/Mayo/2012
8. Interfaces gráficas con Swing
21
Interfaces complejas: JPanel
public MiVentana3() {
super("Añadir usuario");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Panel de fecha
JPanel panelFecha = new JPanel();
panelFecha.setLayout(new FlowLayout());
panelFecha.add(new JTextField(2));
panelFecha.add(new JLabel("/"));
panelFecha.add(new JTextField(2));
panelFecha.add(new JLabel("/"));
panelFecha.add(new JTextField(2));
// Panel de datos
JPanel panelDatos = new JPanel();
GridLayout gl = new GridLayout(3,2,0,5);
panelDatos.setLayout(gl);
panelDatos.add(new JLabel("Nombre:"));
panelDatos.add(new JTextField(10));
panelDatos.add(new JLabel("DNI:"));
panelDatos.add(new JTextField(10));
panelDatos.add(new JLabel("Fecha de nacimiento: "));
panelDatos.add(panelFecha);
…
28/Mayo/2012
8. Interfaces gráficas con Swing
22
Interfaces complejas: JPanel
…
// Panel de botones
JPanel panelBotones = new JPanel();
panelBotones.setLayout(new FlowLayout());
panelBotones.add(new JButton("Aceptar"));
panelBotones.add(new JButton("Cancelar"));
Container cp = getContentPane();
cp.add(panelDatos, BorderLayout.CENTER);
cp.add(panelBotones, BorderLayout.SOUTH);
}
28/Mayo/2012
8. Interfaces gráficas con Swing
23
Interfaces complejas: GridBagLayout
● Más flexible que GridLayout
● Cada componente ha de tener asociado un
objeto de la clase GridBagConstraints. La
asociación se producirá en el método add.
JButton b = new JButton(“Aceptar”);
GridBagConstraints gbc = new GridBagConstraints(...);
getContentPane().add(b, gbc);
28/Mayo/2012
8. Interfaces gráficas con Swing
24
GridBagConstraints
● Atributos públicos:
● int gridx, gridy
● int gridwidth, gridheight
● double weightx, weighty
● int fill
● int anchor
● Insets insets
● int ipadx, ipady
● Pueden ser inicializados en el constructor.
28/Mayo/2012
8. Interfaces gráficas con Swing
25
GridBagConstraints
● Atributos públicos:
● int gridx, gridy
28/Mayo/2012
8. Interfaces gráficas con Swing
26
GridBagConstraints
● Atributos públicos:
● int gridwidth, gridheight
gridheight = 2
gridwidth = 2
28/Mayo/2012
8. Interfaces gráficas con Swing
27
GridBagConstraints
● Atributos públicos:
● double weightx, weighty
weightx = 1.0
weightx = 0.0
28/Mayo/2012
8. Interfaces gráficas con Swing
28
GridBagConstraints
● Atributos públicos:
● int fill
● Puede ser:
● GridBagLayout.HORIZONTAL
● GridBagLayout.VERTICAL
● GridBagLayout.BOTH
28/Mayo/2012
8. Interfaces gráficas con Swing
29
GridBagConstraints
● Atributos públicos:
● int anchor
28/Mayo/2012
8. Interfaces gráficas con Swing
30
GridBagConstraints
● Atributos públicos:
● Insets insets
insets = new Insets(10, 20, 10, 20)
28/Mayo/2012
8. Interfaces gráficas con Swing
31
GridBagConstraints
● Atributos públicos:
● int padx, int pady
● Especifican cuánto espacio añadir a la
anchura/altura mínima de los componentes.
28/Mayo/2012
8. Interfaces gráficas con Swing
32
Constructores de interfaces
● Permiten construir interfaces de usuario
interactivamente.
● Ejemplo: Netbeans (netbeans.org)
28/Mayo/2012
8. Interfaces gráficas con Swing
33
Contenidos
● Ventanas
● Componentes
● Layout Managers
● Manejo de eventos
● Cuadros de diálogo predefinidos
● Dibujo de gráficos
● Arquitectura MVC
28/Mayo/2012
8. Interfaces gráficas con Swing
34
Manejo de eventos
● Un evento es un suceso que ocurre como
consecuencia de la interacción del usuario con
la interfaz gráfica.
● Pulsación de un botón.
● Cambio del contenido en un cuadro de t
Comentarios de: Swing - Java y Servicios Web I - Master en Ingeniería Matemática (0)
No hay comentarios