Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Swing
Swing
www.federicopeinado.es
Depto. de Ingeniera del Software e
Inteligencia Artificial
disia.fdi.ucm.es
Facultad de Informtica
www.fdi.ucm.es
Universidad Complutense de Madrid
www.ucm.es
Herramientas WYSIWYG (what you see is what you get) para crear GUIs:
NetBeans Swing GUI Builder (y ahora tambin para JavaFX)
http://netbeans.org/
Eclipse WindowBuilder (para Swing, SWT, RCP, XWT y GWT muy prometedor!)
www.eclipse.org/windowbuilder/
JavaServer Faces, orientado a la web
www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html
Abstract
Swing
Nuevas funcionalidades
API de accesibilidad para personas con necesidades
especficas
Composicin
aplicacin
de la interfaz grfica de la
Establecer
Help
offset
Componentes grficos
-- elementos grficos de interaccin (e.g.,
botones)
Boton
Gestores de disposicin
(LayoutManagers)
-- algoritmo utilizado para organizar los
elementos grficos dentro del contenedor
Laboratorio de Programacin de Sistemas Swing
offset
6
Contenedores
Contienen otros componentes (o contenedores)
Estos componentes se tienen que aadir al contenedor y para
ciertas operaciones se pueden tratar como un todo
Mediante un gestor de diseo controlan la disposicin
(layout) de estos componentes en la pantalla
Ejemplo: JPanel, JFrame, JApplet
Lienzo (clase Canvas)
Superficie simple de dibujo
Componentes de interfaz de usuario
botones, listas, mens, casillas de verificacin, campos
de texto, etc.
dilogo
Jerarqua de clases
Object
Graphics
Component
Button
Canvas
TextComponent
TextField
TextArea
Container
Window
Checkbox
Panel
Choice
Label
ScrollPane
Frame
Dialog
java.applet.
Applet
List
Scrollbar
FileDialog
Laboratorio de Programacin de Sistemas Swing
10
import javax.swing.*;
public class GUISimple extends JFrame {
public GUISimple (){
setSize(200, 100);
setVisible(true);
}
public static void main(String args[]) {
GUISimple ventana = new GUISimple();
ventana.setTitle("ventana tipo frame");
}
}
11
Contenedores
de alto nivel
Contenedores intermedios
Componentes atmicos
Ventana (JFrame)
Panel raz
Panel de contenido
Panel (JPanel)
Etiqueta (JLabel)
12
Al
13
Loro (JFrame)
Panel Principal
(JSplitPane)
Botonera (JPanel)
Hola (JButon)
Eco (JTextField)
Adios (JButon)
14
java.awt.Component
Esta clase abstracta define la funcionalidad bsica de todos los
componentes grficos en Java
Proporciona, entre otros, los mtodos de registro y eliminacin de
oyentes
java.awt.Container
Clase abstracta que permite agrupar uno o varios componentes de
forma que se puedan tratar como una unidad.
Proporciona mtodos para aadir y eliminar componentes o para
definir el tipo de presentacin que se realiza de los componentes
en la pantalla (mediante layout Managers)
javax.swing.JComponent
Es la clase base de casi todos los componentes de interaccin que
incorpora Swing excepto los contenedores de alto nivel (p.e.
JFrame).
Laboratorio de Programacin de Sistemas Swing
15
javax.swing.JFrame
Habitualmente la clase JFrame se emplea para crear la ventana
javax.swing.JDialog
Genera ventanas secundarias de interaccin con el usuario
Cuadros de dilogo configurables y modificables
Son modales: el usuario no puede interactuar con otra ventana
Container
Window
Dialog
Frame
JDialog
JFrame
JWindow
16
17
La
Las
18
Tipos
de cuadros de dialogo ms
habituales
Message para informar al usuario sobre algn hecho
relevante
Confirm para realizar una pregunta al usuario con las
posibilidades bsicas de respuesta de si, no o cancelar.
Input para solicitar una entrada del usuario
Option permite crear una ventana personalizada de
cualquiera de los tipos anteriores
Todos
19
JOptionPane.showMessageDialog(this, // La ventana
padre.
"Error deconocido!: Lo llevas muy mal!", //El
mensaje.
"Error", // El ttulo de la ventana de dilogo.
JOptionPane.ERROR_MESSAGE // El tipo de mensaje
);
JOptionPane.showMessageDialog(this,
"Te informo de que lo llevas fatal", "Info",
JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this,
"Te aviso de que lo llevas fatal", "Aviso",
JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(this,
Este mensaje es para t, majete!", "Mensaje",
JOptionPane.PLAIN_MESSAGE);
Laboratorio de Programacin de Sistemas Swing
20
int seleccionada =
JOptionPane.showConfirmDialog(this,
"Lo aceptas?", "Aviso",
JOptionPane.YES_NO_OPTION, // Configuracin del mensaje
JOptionPane.INFORMATION_MESSAGE);
switch(seleccionada) {
case JOptionPane.YES_OPTION: ... // tratar SI
case JOptionPane.NO_OPTION: .. // tratar NO
case JOptionPane.CLOSED_OPTION: .. // tratar ventana cerrada
}
int seleccionada =
JOptionPane.showConfirmDialog(this,
"Lo aceptas?","Aviso",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
... // los posibles valores devueltos son los anteriores y
... // JOptionPane.CANCEL_OPTION
String nombre = JOptionPane.showInputDialog(this,
"Cmo te llamas, majete?",
"Peticin", JOptionPane.QUESTION_MESSAGE
);
// ... procesar entrada
Laboratorio de Programacin de Sistemas Swing
21
22
if (JOptionPane.showConfirmDialog(this, panel
,"Introduzca datos"
,JOptionPane.OK_CANCEL_OPTION
,JOptionPane.PLAIN_MESSAGE)
== JOptionPane.OK_OPTION) {
String nombre = campoNombre.getText();
String apellidos = campoApellidos.getText();
int numPer=Integer.parseInt(campoNP.getText());
}
23
import javax.swing.*;
// se crea el selector de ficheros
JFileChooser selector = new JFileChooser();
// solo posibilidad de seleccionar directorios
selector.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
// se muestra; se comprueba si el usuario acepta o cancela
int opcion = selector.showOpenDialog(null);
if (opcion == JFileChooser.APPROVE_OPTION) {
//obtenemos el fichero o directorio seleccionado
File archivo = selector.getSelectedFile();
System.out.println("archivo seleccionado: " + archivo);
}
else
System.out.println("operacion cancelada ");
24
JPanel
JPanel
JScrollPane
JSplitPane
JTabbedPane
JBoxTool
25
26
27
28
29
Iconos
componentes
Etiquetas
30
Los botones, junto con los mens, son los controles ms tpicos
Existen diferentes tipos (todos ellos especializan a AbstractButton)
JButton: Botn aislado. Puede pulsarse, pero su estado no cambia
JToggleButton : Botn seleccionable. Cuando se pulsa el botn, su estado pasa a
seleccionado, hasta que se pulsa de nuevo (entonces se deselecciona). isSelected
permite chequear su estado
JCheckBox : Especializacin de JToggleButton que implementa una casilla de
verificacin. Botn con estado interno, que cambia de apariencia de forma
adecuada segn si est o no est seleccionado
JRadioButton: Especializacin de JToggleButton que tiene sentido dentro de un
mismo grupo de botones (ButtonGroup) que controla que solamente uno de ellos
est seleccionado (importante: ButtonGroup es nicamente un controlador, no un
componente)
31
JComponent
AbstractButton
JButton
JToggleButton
JRadioButton
JMenuItem
JCheckBox
JComponent
JMenuBar
JPopupMenu
JAbstractButton
JSeparator
JMenu
JRadioButtonMenuItem
JCheckboxMenuItem
32
33
import javax.swing.*;
JMenuBar barraMenu = new JMenuBar();
JMenu menuOpciones = new JMenu("Men de opciones");
JMenuItem listar = new JMenuItem("Listar todos los alumnos");
menuOpciones.add(listar);
// separador
menuOpciones.add(new JSeparator());
JMenuItem listarTarde = new JMenuItem("Ver alumnos de la tarde");
menuOpciones.add(listarTarde);
JMenuItem listarMaana = new JMenuItem("Ver alumnos de la
maana");
menuOpciones.add(listarMaana);
menuOpciones.add(new JSeparator());
JCheckBoxMenuItem verNumero =
new JCheckBoxMenuItem("Mostrar Nmero");
menuOpciones.add(verNumero);
barraMenu.add(menuOpciones);
// establecer como barra de mens
// en contenedor de alto nivel
setJMenuBar(barraMenu);
Laboratorio de Programacin de Sistemas Swing
34
JComponent
JTextComponent
JTextField
JTextArea
JPasswordField
JEditorPane
JTextPane
35
Permite
36
37
La
38
39
40
Layout Manager
Cmo se colocan los componentes (usando el mtodo
add) depende de la composicin (layout)
Tipos de diseos o composiciones
FlowLayout
Los componentes se ponen de izquierda a derecha hasta llenar la lnea,
y se pasa a la siguiente. Cada lnea se centra
Por defecto, en paneles y applets
BorderLayout
Se ponen los componentes en un lateral o en el centro
se indica con una direccin:East, West, North, South, Center
Por defecto, en marcos
GridLayout
Se colocan los componentes en una rejilla rectangular (filas x cols)
Se aaden en orden izquierda-derecha y arriba-abajo
41
contenedor
componente1 componente2 componente3
componente4
componente5
FlowLayout
componente6
contenedor
componente1
componente2
componente3
componente4
componente5
componente6
GridLayout(3,2)
42
GridBagLayout
Similar al GridLayout pero mas verstil
Presenta los componentes en una rejilla, pero:
Un componente puede ocupar ms de una fila y ms de una columna
Las filas y las columnas pueden tener tamaos diferentes
No se tiene que rellenar en un orden predeterminado
Utiliza GridBagConstraints para especificar como deben
43
44
BoxLayout
Organiza los componentes en una nica fila o columna
Por defecto el espacio libre se deja al final
Los elementos pueden tener distinto tamao y
alineacin
Normalmente
clase Box
45
46
47
48
Proporciona
drawLine
drawRect y fillRect
drawPolygon
drawPolyline
drawOval y fillOval
drawArc y fillArc
y para escribir
drawString
setFont
texto
y
(0,100)
(width-1,height-1)
49
50
Federico Peinado
www.federicopeinado.es