Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Graphical User Interface
Graphical User Interface
11
Java GUI
La librería Swing
//java.sun.com/docs/books/tutorial/uiswing
//programacion.com/java/tutorial/swing/
Programación conducida por eventos
Código
del
sistema
Su código
Generación de eventos
GUI
Sistema Operativo
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
Paquetes JFC/Swing
• javax.swing
• javax.swing.plaf • javax.swing.table
• javax.swing.plaf.basic • javax.swing.tree
• javax.swing.plaf.metal • javax.swing.border
• javax.swing.plaf.multi • javax.swing.colorchooser
• javax.swing.filechooser
• javax.swing.text
• javax.swing.text.html
• javax.swing.text.html.parser
• javax.swing.event
• javax.swing.text.rtf • javax.swing.undo
Paquetes JFC/Swing
Componentes,
Control del incluyendo
“Look & Feel” componentes
de Swing complejos
java.awt.Panel java.awt.Window
java.applet.Applet java.awt.Dialog
JMenu
JMenuBar
JComponent
JLayeredPane
JRootPane
JPanel
JTabbedPane
JDesktopPane
JSplitPane
JPopupMenu JInternalFrame JScrollPane
JOptionPane JToolbar
Similar a AWT
Nuevos de
Swing
Componentes de Swing
q Usualmente es un JPanel.
q En la mayoría de las aplicaciones Swing contiene casi todo, excepto
la barra de menú.
q Debe ser creado explícitamente.
Layered Panes
TabbedPane Toolbar
Contenedores especiales
InternalFrame LayeredPane
Root Pane
JFrame
Algunos métodos de JFrame
myFrameInstance.getContentPane().add(myComponent);
theWindow.setJMenuBar(cyanMenuBar);
theWindow.setSize( 220, 100 );//o mejor
theWindow.pack();
Nueva funcionalidad de JFrame
§ Propiedades
JButton
§ Métodos
§ Eventos
Componentes GUI
1. Crear
§ Instanciar objeto: b = new JButton(“press me”);
2. Configurar
§ Propiedades: b.text = “press me”; (evitar en Java)
§ Métodos:
b2 = new JButton("Middle button", middleButtonIcon)
b2.setVerticalTextPosition(AbstractButton.BOTTOM);
b2.setHorizontalTextPosition(AbstractButton.CENTER);
b2.setMnemonic(KeyEvent.VK_M);
b2.setToolTipText("This middle button does nothing “ + "when you click it.");
3. Añadir
panel.add(b);
4. Manejar eventos
Características especiales
q Tool tips
JButton button = new JButton ("Compute");
button.setToolTipText ("Calculate size.");
q Mnemonic
button.setMnemonic ("C");
q Disable
JButton button = new JButton (“Do It”);
button.setEnabled (false);
Características especiales
q Bordes
JPanel myPanel = new JPanel();
Border myBorder = BorderFactory.createEtchedBorder();
myPanel.setBorder(myBorder);
w Empty w Titled
w Line w Matte
w Etched w Compound
w Bevel
Bordes
Anatomía de una aplicación GUI
JFrame
JFrame
JPanel contenedores
JPanel
JButton
JButton JLabel
JLabel
Estructura interna
GUI
Uso de un componente GUI
1. Crearlo
2. Configurarlo orden
importante
3. Añadir hijo (si es contenedor)
4. Añadir al padre (si no es JFrame)
5. Manejar los eventos
Construcción bottom up
Listener
§ Crear:
w Frame
JLabel JButton
w Panel
w Componentes
w Listener JPanel
contenedores
componentes
Window Layout
ninguno,
Left to right,
programador
Top to bottom
setea x,y,w,h
w e JButton
c One at a time
s
Null Layout
q setLayout(null);
q El programador es responsable de establecer el tamaño y posición
de cada componente (setBounds(x,y,w,h))
Combinaciones
JButton JButton
JTextArea
Combinaciones
JButton JButton
JFrame
n
JPanel: FlowLayout
JPanel: BorderLayout
JTextArea
Tareas comunes del LM
label
rigidArea(0,5) Center
JScrollPane
South
q Es el LM más sofisticado y
flexible. Alinea componentes
en una matriz de celdas
permitiendo a algunos
componentes abarcar más de
una celda. Container contentPane = getContentPane();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
contentPane.setLayout(gridbag);
c.fill = GridBagConstraints.HORIZONTAL;
Jbutton button = new JButton("Button 1");
c.weightx = 0.5; c.gridx = 0; c.gridy = 0;
gridbag.setConstraints(button, c);
BoxLayout
buttonPane.add(setButton);
BoxLayout
%&'()&*+," Box.createHorizontalGlue()
!"#$
-$'+(.," Box.createVerticalGlue()
new Box.Filler(minSize,
customBox.Filler prefSize, maxSize)
Otras estrategias Swing
Todo lo demás:
Programador
JButton
Cuándo se pinta?
JComponent
paint paintComponent
paintBorder
Nunca llamar paintChildren
paint()
directamente. extends
Llamar repaint() JPanel
paint paintComponent
paintBorder
paintChildren
extends El método
PaintPanel correcto a
anular en
paint paintComponent
pintado custom
paintBorder
paintChildren
Pintado
w drawImage(image, x, y, observer)
w drawImage(image, x, y, w, h, observer)
w drawImage(image, x, y, bgcol, observer)
w drawImage(image, x, y, w, h, bgcol, obj)