Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Conceptos
Clases anidadas
Aplicaciones
Applets
Swing
Swing utiliza el
modelo de
eventos basado
en delegacin de
AWT (definido a
partir de Java 1.1)
AWT
Soporte nativo para GUIs
Contenedores
Graphics
Component
Button
Canvas
Container
TextComponent
Checkbox
Choice
TextField
TextArea
Window
Panel
Label
ScrollPane
Frame
Dialog
java.applet.
Applet
List
Scrollbar
FileDialog
Juan Pavn Mestras
Facultad de Informtica UCM, 2007-08
Contenedores
Panel
Window
10
Barra de men
Controles de la ventana
Ttulo
Panel de contenidos
11
La clase javax.swing.JFrame
Los contenidos se
aaden en el panel de
contenidos (content
pane) accesible a
travs del mtodo
getContentPane (por
defecto, un objeto de
tipo Jpane, aunque
puede cambiarse con
setContentPane).
La barra de men
puede fijarse con
setJMenuBar
12
13
14
Uso de componentes
1) Crear el componente
usando new:
JButton b = new JButton(Correcto);
2) Aadirlo al contenedor
usando add:
contentPane.add(b); // aadir en el contenedor contentPane
// crear y aadir el componente en una sla operacin:
contentPane.add(new Label(Etiqueta 1));
contentPane.add(new Label(Etiqueta 2));
Si luego se quiere quitar, usar remove(componente)
15
16
Tratamiento de eventos
17
Tratamiento de eventos
ActionEvent
18
Tratamiento de eventos
19
addActionListener(ActionListener l)
removeActionListener(ActionListener l)
20
}
else if (command.equals("Quit")) {
openItem.addActionListener(this);
}
}
Juan Pavn Mestras
Facultad de Informtica UCM, 2007-08
21
Aunque funciona
Es mejor definir clases especficas por cada evento
Mayor escalabilidad
Evitar identificar los componentes por el texto
22
Clases anidadas
}
}
23
Clases anidadas
24
25
ActionListener annimo
26
27
El proyecto ImageViewer
28
Procesamiento de imgenes
29
ImageViewer
ImageFileManager
ImagePanel
OFImage
30
La clase OFImage
Subclase de java.awt.image.BufferedImage
getPixel, setPixel
getWidth, getHeight
java.awt.Color
31
32
33
Tipos de disposiciones:
FlowLayout
BorderLayout
GridLayout
34
FlowLayout
componente5
componente6
contenedor
componente1
componente2
componente3
componente4
componente6
componente5
Juan Pavn Mestras
Facultad de Informtica UCM, 2007-08
GridLayout(3,2)
35
Contenedores anidados
contenedor
componente1
componente2
contenedor
componente3
componente4
componente5
36
GridBagLayout
37
Administradores de diseo
38
FlowLayout
39
40
BorderLayout
GridLayout
41
BoxLayout
Note: no component
resizing.
42
Botones
Los botones, junto con los mens, son los controles ms tpicos
en una GUI
Existen diferentes tipos (especializaciones de AbstractButton)
43
Botones
44
Mens
45
Mens
La creacin de una barra de mens bsica supone:
Crear un objeto de tipo JMenuBar.
Para cada entrada, crear un objeto de tipo JMenu.
Incluir objetos de tipo JMenuItem en el men. Esto puede incluir
mens anidados.
Asociar a los items acciones apropiadas (notifican eventos
semnticos de tipo ActionEvent, ya que, en realidad, especializan a
AbstractButton).
46
Mens
public class PruebaMenu extends JFrame {
public void ejecuta() {
JMenuBar barra = new JMenuBar();
JMenu menu1 = new JMenu("Men 1");
menu1.add(new JMenuItem("Una opcin de texto"));
menu1.add(new JSeparator());
ButtonGroup grupo = new ButtonGroup();
JRadioButtonMenuItem r1 = new JRadioButtonMenuItem("Opcin 1");
JRadioButtonMenuItem r2 = new JRadioButtonMenuItem("Opcin 2");
grupo.add(r1);
grupo.add(r2);
menu1.add(r1);
menu1.add(r2);
menu1.add(new JSeparator());
menu1.add(new JCheckBoxMenuItem("Seleccin 1",true));
menu1.add(new JCheckBoxMenuItem("Seleccin 2"));
JMenu menu11 = new JMenu("Submen");
menu11.add(new JMenuItem("Opcin 1"));
menu11.add(new JMenuItem("Opcin 2"));
menu1.add(menu11);
barra.add(menu1);
barra.add(new JMenu("Men 2"));
setJMenuBar(barra);
pack();
setVisible(true);
}
public static void main(String[] args) {
new PruebaMenu().ejecuta();
}}
47
Interaccin modal
48
Interaccin modal
49
Interaccin modal
JOptionPane.showMessageDialog(this, //
// La
La ventana
ventana padre.
padre.
JOptionPane.showMessageDialog(this,
"Error
deconocido!:
Lo
llevas
muy
mal!",
//El
mensaje.
"Error deconocido!: Lo llevas muy mal!", //El mensaje.
"Error", //
// El
El ttulo
ttulo de
de la
la ventana
ventana de
de dilogo.
dilogo.
"Error",
JOptionPane.ERROR_MESSAGE
//
El
tipo
de
mensaje
JOptionPane.ERROR_MESSAGE // El tipo de mensaje
);
);
JOptionPane.showMessageDialog(this,
JOptionPane.showMessageDialog(this,
"Te informo
informo de
de que
que lo
lo llevas
llevas fatal",
fatal", "Info",
"Info",
"Te
JOptionPane.INFORMATION_MESSAGE);
JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this,
JOptionPane.showMessageDialog(this,
"Te aviso
aviso de
de que
que lo
lo llevas
llevas fatal",
fatal", "Aviso",
"Aviso",
"Te
JOptionPane.WARNING_MESSAGE);
JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(this,
JOptionPane.showMessageDialog(this,
Este mensaje
mensaje es
es para
para t,
t, majete!",
majete!", "Mensaje",
"Mensaje",
Este
JOptionPane.PLAIN_MESSAGE);
JOptionPane.PLAIN_MESSAGE);
Juan Pavn Mestras
Facultad de Informtica UCM, 2007-08
50
Interaccin modal
int seleccionada
seleccionada ==
int
JOptionPane.showConfirmDialog(this,
JOptionPane.showConfirmDialog(this,
"Lo aceptas?",
aceptas?", "Aviso",
"Aviso",
"Lo
JOptionPane.YES_NO_OPTION,
// Configuracin
Configuracin del
del mensaje
mensaje
JOptionPane.YES_NO_OPTION, //
JOptionPane.INFORMATION_MESSAGE);
JOptionPane.INFORMATION_MESSAGE);
switch(seleccionada) {{
switch(seleccionada)
case JOptionPane.YES_OPTION:
JOptionPane.YES_OPTION: ...
... //
// tratar
tratar SI
SI
case
case
JOptionPane.NO_OPTION:
..
//
tratar
NO
case JOptionPane.NO_OPTION: .. // tratar NO
case JOptionPane.CLOSED_OPTION:
JOptionPane.CLOSED_OPTION: ..
.. //
// tratar
tratar ventana
ventana cerrada
cerrada
case
default:
...
//
esta
opcin
nunca
debera
alcanzarse
default: ... // esta opcin nunca debera alcanzarse
}}
int seleccionada
seleccionada ==
int
JOptionPane.showConfirmDialog(this,
JOptionPane.showConfirmDialog(this,
"Lo aceptas?","Aviso",
aceptas?","Aviso",
"Lo
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
JOptionPane.WARNING_MESSAGE);
...
//
los posibles
posibles valores
valores devueltos
devueltos son
son los
los anteriores
anteriores yy
... // los
...
//
JOptionPane.CANCEL_OPTION
... // JOptionPane.CANCEL_OPTION
51
Interaccin modal
String nombre
nombre == JOptionPane.showInputDialog(this,
JOptionPane.showInputDialog(this,
String
"Cmo
te
llamas,
majete?",
"Cmo te llamas, majete?",
"Peticin",
JOptionPane.QUESTION_MESSAGE
"Peticin", JOptionPane.QUESTION_MESSAGE
);
);
// ...
... procesar
procesar entrada
entrada
//
String[] colores
colores == {"rojo","negro","amarillo",
{"rojo","negro","amarillo",
String[]
"azul","majenta"};
"azul","majenta"};
Object
opcion
=
Object opcion =
JOptionPane.showInputDialog(this,
JOptionPane.showInputDialog(this,
"Selecciona un
un color,
color, resalao!",
resalao!", "Peticin",
"Peticin",
"Selecciona
JOptionPane.QUESTION_MESSAGE,
JOptionPane.QUESTION_MESSAGE,
null, //icono.
//icono. no
no hay.
hay.
null,
colores,
//
opciones.
Se le
le podra
podra pasar
pasar un
un array
array de
de
colores, // opciones. Se
//
objetos
arbitrarios
// objetos arbitrarios
colores[0] //opcin
//opcin inicial
inicial
colores[0]
);
);
// ...procesar
...procesar opcin...
opcin...
//
52
Interaccin modal
String[] sexo
sexo == {"hetero","homo","bi","auto"};
{"hetero","homo","bi","auto"};
String[]
int
opcion
=
int opcion =
JOptionPane.showOptionDialog(this,
JOptionPane.showOptionDialog(this,
"Y t
t qu
qu eres?",
eres?", "Peticin",
"Peticin",
"Y
-1,
//
opciones->quedan
fijadas por
por el
el array
array de
de opciones
opciones
-1, // opciones->quedan fijadas
JOptionPane.QUESTION_MESSAGE,
JOptionPane.QUESTION_MESSAGE,
null,//icono. no
no hay.
hay.
null,//icono.
sexo,
//
array
de
opciones
sexo, // array de opciones
sexo[0] //
// opcion
opcion inicial
inicial
sexo[0]
);
);
... //
// procesamiento
procesamiento de
de la
la opcion
opcion ...
...
...
53
54
Un filtro de ficheros
55
selector.showOpenDialog(this)
selector.showSaveDialog(this)
56
57
58
JLabel. Etiquetas
JTextField. Entrada de una lnea de texto
JTextArea. Entradas de varias lneas de texto
JSlider. Una barra de seleccin en una escala
JList. Una lista de elementos seleccionables
JComboBox. Una lista de elementos desplegable
JPopupMenu. Un men desplegable
59
La clase Graphics
60
La clase Graphics
drawLine
drawRect y fillRect
drawPolygon
drawPolyline
drawOval y fillOval
drawArc y fillArc
x (100,0)
(0,0)
drawString
setFont
y
(0,100)
Juan Pavn Mestras
Facultad de Informtica UCM, 2007-08
(width-1,height-1)
61
62
63
64
Code duplication?
Refactor!
65
Ms filtros
66
imageviewer2-0
67
A GridLayout inside
a FlowLayout inside
a BorderLayout.
68
Borders
69
Adding spacing
JPanel contentPane = (JPanel)frame.getContentPane();
contentPane.setBorder(new EmptyBorder(6, 6, 6, 6));
// Specify the layout manager with nice spacing
contentPane.setLayout(new BorderLayout(6, 6));
imagePanel = new ImagePanel();
imagePanel.setBorder(new EtchedBorder());
contentPane.add(imagePanel, BorderLayout.CENTER);
70
Resumen
71
Resumen
72