Professional Documents
Culture Documents
03.03.11
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Apunte histrico
1981 Xerox Star (ventanas y 1 aparicin del ratn) 1 1984 Apple Macintosh, X Windows (popularizacin del ratn)
There is no evidence that people want to use these things
Consistencia de las interfaces a travs de distintas aplicaciones Contrapartida: limitaciones expresivas (posibilidad de programacin complementaria a bajo nivel) Sin toolkits: dibujar y redibujar pixels en la pantalla, seguir coordenadas del ratn, comprobar regiones de la pantalla, gestionar seal de entrada
4
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Editores interactivos de interfaces: NetBeans Jcreator Visual Studio etc NetBeans, Jcreator, Studio, etc.
Programacin visual Alta facilidad de uso, alcance limitado
No existe una funcin pulsar ratn que sepa qu debe hacer segn el elemento sobre el que acta Cada elemento grfico contiene la funcionalidad correspondiente a la accin de pulsar el ratn (la responsabilidad reside en el objeto) Programacin basada en eventos (mensajes)
6
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
10
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Layout de componentes
13
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
15
Componentes predefinidas
JLabel JTextField JButton
JTextArea
JFrame
16
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Alto fijo
17
Aspectos interactivos
Escribir string del rea de texto en el fichero indicado en el campo de texto
Leer el fichero indicado en el campo de texto, asignar como string del rea de texto
18
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
import javax.swing.*; import java.awt.event.*; import java.io.*; public class Editor extends JFrame implements ActionListener { JTextField fileName; JTextArea editArea; JButton load, save, quit; Editor () { setBounds (100, 100, 335, 325); java.awt.Container p = getContentPane (); p.setLayout (null); JLabel label = new JLabel ("File Name: "); label.setBounds (10 0 300 20) l b l d (10, 0, 300, 20); p.add (label); fileName = new JTextField (); fileName.setBounds (10, 20, 300, 20); p.add (fileName); ...
19
... load = new JButton ("Load"); load.setBounds (30, 50, 70, 20); p.add (load); save = new JButton ("Save"); save.setBounds (120, 50, 70, 20); p.add (save); quit = new JButton ("Quit"); quit.setBounds (210, 50, 70, 20); p.add (quit); editArea = new JTextArea (); editArea.setBounds (10, 80, 300, 200); p.add (editArea); load.addActionListener (this); save.addActionListener (this); quit.addActionListener (this); setVisible (true); } // Fin constructor ...
20
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
... public void actionPerformed (ActionEvent e) { String command = e.getActionCommand (); if (command.equals ("Quit")) System.exit (0); else if (command.equals ("Load")) load (); else if (command.equals ("Save")) save (); } ...
21
... void load () { try { RandomAccessFile input = new RandomAccessFile (fileName.getText (), "r"); byte buffer[] = new byte [(int) input.length ()]; input.read (b ff ) i d (buffer); input.close (); editArea.setText (new String (buffer)); } catch (IOException e) { e.printStacktrace (); } } void save () { try { FileWriter output = e te new FileWriter (fileName.getText ()); output.write (editArea.getText ()); output.close (); } catch (IOException e) { e.printStacktrace (); } } ...
22
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
... public static void main (String args[]) { new Editor (); } } // Fin clase Editor
23
Componentes
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Ver http://java.sun.com/docs/books/tutorial
25
Ver http://java.sun.com/docs/books/tutorial
26
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Ver http://java.sun.com/docs/books/tutorial
27
Ver http://java.sun.com/docs/books/tutorial
28
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Ver http://java.sun.com/docs/books/tutorial
29
JComponent
JFrame
JDialog
AbstractButton
MenuElement
JTextComponent
...
JButton
JToggleButton
JMenuItem
JMenuBar
JPopupMenu
JTextField
JTextArea
JEditorPane
JCheckBox
JRadioButton
JMenu
JCheckBoxMenuItem
JTextPane
JRadioButtonMenuItem 30
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
... JLabel
JPanel
JScrollPane
JTabbedPane
JSplitPane
ToolBar
...
JLayeredPane
JInternalFrame
31
... JTable
JTree
JFileChooser
JColorChooser
JScrollBar
JSlider
...
JList
JComboBox
JOptionPane
JProgressBar
JSpinner
32
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
El programador:
Crea instancias de clases predefinidas La apariencia se controla modificando propiedades (estado) de la componente Subclasifica componentes predefinidas modificando sus mtodos Puede crear grficos a medida, o sus propias componentes desde cero, implementando paintComponent(Graphics) para dibujarlas
33
La clase javax.swing.JComponent
Dibujarse en la pantalla: paintComponent(Graphics) Control de la apariencia visual: Color: setForeground(Color), getForeground(), g ( ), g g (), setBackground(Color), getBackground() Font: setFont(Font), getFont() Cursor: setCursor(Cursor), getCursor() Tamao y posicin: setSize(int,int), getSize() Dimension, getLocation() Point, getLocationOnScreen() Point, setBounds(int,int,int,int), getBounds() Rectangle ( , , , ), g () g (El layout manager puede alterar estos valores) Bordes: setBorder(Border) Tooltips: setToolTipText(String) Y ms
34
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Color:
new Color (0.8f, 0.3f, 1.0f) en RGB Constantes de tipo Color: Color.white, Color.blue, etc. Funciones para conversin RGB HSB
Font:
new Font ("Helvetica", Font.BOLD + Font.ITALIC, 18) getName(), getStyle(), getSize() Constantes de estilo: Font BOLD Font ITALIC Font PLAIN Font.BOLD, Font.ITALIC, Font.PLAIN
Cursor:
new Cursor(Cursor.HAND_CURSOR), Cursor.CROSSHAIR_CURSOR, etc.
Border:
BorderFactory.CreatexxxBorder()
Toolkit:
Toolkit.getDefaultToolkit().getScreenSize()
35
Bordes
36
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Las ventanas no pueden aadirse a otra componente (excepto JInternalFrame) ) La colocacin de las componentes en un contenedor se puede definir:
Mediante layout managers de distintos tipos A mano, con posiciones absolutas
37
38
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
39
Ejemplo
JFrame
JPanel
JPanel
JList
JPanel
JComboBox
JButton
JList
JTextArea
JPanel
JButton
JButton
JButton
JButton
JButton
40
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Layout
Layout management
Qu es layout?
Disposicin global de un conjunto de componentes
Qu es un layout manager?
Es un objeto de una clase que implementa la interfaz LayoutManager Controla la disposicin de las componentes de un Container Existen distintas clases de manager para distintos tipos de layout setLayoutManager(LayoutManager) de Container Cada clase de contenedor tiene un layout por defecto Por ejemplo: JFrame BorderLayout, JPanel FlowLayout
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
43
BorderLayout
class Ventana extends JFrame { Ventana () { Container p = getContentPane (); p.setLayout (new BorderLayout ()); p.add ("North", new JButton("North")); p.add ("South", new JButton("South")); p.add ("East", new JButton("East")); p.add ("West", new JButton("West")); p.add ("Center" new JB tt ("C t ")) dd ("Center", JButton("Center")); } }
44
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
FlowLayout
p.setLayout (new FlowLayout p.add (new JButton ("Button p.add (new JButton ("Button p.add p add (new JButton ("Button ( Button p.add (new JButton ("Button p.add (new JButton ("Button
45
FlowLayout (II)
FlowLayout f = new FlowLayout (); f.setAlignment(FlowLayout.RIGHT); f.setHgap (20); p.setLayout (f); p.add (new JButton ("Button 1")); p.add (new JButton ("Button 2")); p.add (new JButton ("Button 3")); p.add (new JButton ("Button 4")); p.add (new JButton ("Button 5")); p.add (new JButton ("Button 6"));
46
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
GridLayout
setRows(int), setColumns(int) GridLayout(0,n) GridLayout(0 n) tantas filas como hagan falta
p.setLayout (new GridLayout p.add (new JButton ("Button p.add (new JButton ("Button p.add (new JButton ("Button p.add (new JButton ("Button p.add (new JButton ("Button
47
javax.swing.BoxLayout (I)
Disposicin en fila, columna, o por ajuste de lnea Respeta las dimensiones preferidas (mnimas/mximas) de las componentes Permite que cada componente decida su alineacin con setAlignmentX(Component.LEFT|RIGHT|CENTER_ALIGNMENT), setAlignmentY(Component.TOP|BOTTOM|CENTER_ALIGNMENT)
p.setLayout (new BoxLayout (p, BoxLayout.Y_AXIS)); p.add (new JButton ("Button 1")); p.add (new JButton ("Button 2 is large")); p.add (new JButton ("Button 3 is even larger")); p.add (new JButton ("Button 4")); p.add (new JButton ("Button 5"));
48
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
javax.swing.BoxLayout (II)
Admite componentes invisibles: rgidas o flexibles
p.setLayout (new BoxLayout (p, BoxLayout.X_AXIS)) p.add (firstComponent); p.add (Box.createRigidArea (new Dimension (5,0))); p.add (secondComponent);
p.setLayout (new BoxLayout (p, BoxLayout.X_AXIS)) p.add (firstComponent); p.add (Box.createHorizontalGlue ()); p.add (secondComponent);
49
java.awt.CardLayout
Las componentes ocupan un mismo espacio: todo el contenedor Slo una es visible en cada momento
Subir / bajar: next (Container) previous (Container) Mostrar primera, mostrar ltima first (Container) last (Container) Mostrar por nombre componentes aadidas con nombre public void show (Container, String) add (String, Component) de Container
50
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
class CardDemo extends JFrame implements ActionListener, ItemListener { JComboBox combo; CardLayout panelLayout = new CardLayout (); JPanel cardPanel; CardDemo () { Container p = g getContentPane (); cardPanel = new JPanel (); cardPanel.setLayout (panelLayout); cardPanel.add ("One", new JLabel ("Component 1", JLabel.CENTER)); cardPanel.add ("Two", new JLabel ("Component 2", JLabel.CENTER)); cardPanel.add ("Th d l dd ("Three", " new JLabel ("Component 3", JLabel.CENTER)); cardPanel.add ("Four", new JLabel ("Component 4", JLabel.CENTER)); p.add ("Center", cardPanel); ...
51
first = new JButton ("First"); last = new JButton ("Last"); previous = new JButton ("Previous"); next = new JButton ("Next");
combo = new JComboBox (); combo.addItem ("One"); combo.addItem ("Two"); combo.addItem ("Three"); combo.addItem ("Four"); JPanel panel = new JPanel (); panel.add (first); ... panel.add (last); first.addActionListener panel.add (previous); last.addActionListener panel.add (next); previous.addActionListener panel.add (combo); next.addActionListener combo.addItemListener p.add("South",panel); } // Fin del constructor ... ...
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
... public void actionPerformed (ActionEvent e) { String command = e.getActionCommand (); if (command.equals ("First")) p panelLayout.first ( y (cardPanel); ); else if (command.equals ("Last")) panelLayout.last (cardPanel); else if (command.equals ("Previous")) panelLayout.previous (cardPanel); else if (command.equals ("Next")) panelLayout.next (cardPanel); } public void it St t Ch bli id itemStateChanged ( d (ItemEvent e) { ) String item = (String) e.getItem (); panelLayout.show (cardPanel, item); } } // Fin de CardDemo
53
54
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
java.awt.GridBagLayout
Similar a GridLayout
Componentes situadas en una cuadrcula Filas y columnas tienen anchura proporcional al tamao del contenedor
La disposicin (posicin y tamao) de cada componente se controla con un objeto d ti GridBagConstraints bj t de tipo i i
setConstraints (Component, GridBagConstraints) de GridBagLayout La disposicin del objeto al que se asocia la constraint se define por medio de las variables de los objetos GridBagConstraints
55
Variables de java.awt.GridBagConstraints
gridx, gridy: posicin superior izquierda (columna y fila)
A continuacin de la componente anterior: GridBagConstraints.RELATIVE (valor ( l por d f t ) defecto)
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
public class GridBagWindow extends JFrame { protected void makebutton (String name, GridBagLayout gridbag, GridBagConstraints c) { JButton button = new JButton (name); g gridbag.setConstraints (button, c); g getContentPane () .add (button); } public GridBagWindow () { GridBagLayout gridbag = new GridBagLayout (); getContentPane () .setLayout (gridbag); GridBagConstraints c = new GridBagConstraints (); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; makebutton ("Button1", gridbag, c); makebutton ("Button2", gridbag, c); makebutton ("Button3", gridbag, c); ...
57
... c.gridwidth = GridBagConstraints.REMAINDER; makebutton ("Button4", gridbag, c); makebutton ("Button5", gridbag, c); c.gridwidth = GridBagConstraints.RELATIVE; makebutton ("Button6", g ( , gridbag, c); g, ); c.gridwidth = GridBagConstraints.REMAINDER; makebutton ("Button7", gridbag, c); c.gridwidth = 1; // valor por defecto c.gridheight = 2; c.weighty = 1.0; makebutton ("Button8", gridbag, c); c.weighty c weighty = 0 0; // valor por defecto 0.0; c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = 1; // valor por defecto makebutton ("Button9", gridbag, c); makebutton ("Button10", gridbag, c); } }
58
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
59
BorderLayout algunas (alto o ancho) dependiendo de la regin Las dimensiones que respeta las pregunta a la componente con getPreferredSize() Dimension
Cada tipo de componente predefinida tiene su propia definicin de getPreferredSize(), p.e. en funcin del texto que muestran, etc. Si se asigna una dimensin con setPreferredSize(Dimension), entonces getPreferredSize() devuelve por defecto esta dimensin Si se quiere establecer dinmicamente la dimensin preferida, sobreescribir getPreferredSize() Anlogamente: get/setMinimumSize(), get/setMaximumSize()
60
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
La clase java.awt.Graphics
Pasado a paintComponent() por el sistema runtime de Swing Dibujo de primitivas grficas:
drawLine(int,int, int,int), drawRect(int,int,int,int), drawOval(int,int,int,int), drawArc(int,int,int,int,int,int), fillRect(int,int,int,int) drawString(String,int,int) drawImage(Image,int,int[,int,int],ImageObserver)
Estado:
Un objeto JComponent est asociado 1-1 a una componente: getGraphics() de C tG hi () Component t Origen de coordenadas: translate(int,int) Area clip: getClip(), setClip(int,int,int,int) Color: setColor(Color), getColor() Font: setFont(Font), getFont() Modo XOR: setXORMode(Color)
64
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
66
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Responder a eventos
1. Implementar la interfaz listener correspondiente al tipo de evento
Existe una correspondencia de tipo de evento / tipo de listener
2.
3.
4. 4
El sistema Swing/AWT se ocupa del resto Las clases que implementan listeners pueden ser componentes Swing, o cualquier otra clase esto queda a eleccin del programador
67
El modelo de eventos
Los eventos son objetos de distintas subclases de AWTEvent Se generan eventos cuando: g
Se produce input del usuario: MouseEvent, KeyEvent Un widget se acciona: ActionEvent, ItemEvent, AdjustmentEvent Una ventana es manipulada: WindowEvent Otras causas: ContainerEvent, ComponentEvent, PaintEvent, etc.
Los eventos se producen en el contexto de una componente: emisor Otras componentes pueden registrarse para distintos tipo de eventos emitidos por un emisor: receptores Para ser receptora de un tipo de mensajes, una clase debe implementar la interfaz listener correspondiente
68
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
69
Ejemplo
Clase de evento: Objetos que lo emiten: Tipo de interfaz listener: Mtodos a implementar en clase listener: Mtodo para registrar listener:
ActionEvent JButton, JMenuItem, JCheckBox, JRadioButton, JComboBox, JTextField ActionListener actionPerformed (ActionEvent) addActionListener (ActionListener)
Una componente slo puede registrar listeners del tipo de eventos que genera la componente
70
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
AWTEvent
CaretEvent
ChangeEvent
TableModelEvent
TreeModelEvent ...
TableColumnModelEvent
ActionEvent
ItemEvent
TextEvent
ComponentEvent
AdjustmentEvent
WindowEvent
InputEvent
ContainerEvent
FocusEvent
PaintEvent
KeyEvent
MouseEvent Swing
MenuDragMouseEvent
MouseWheelEvent
71
...
TreeSelectionEvent
ListDataEvent
MenuEvent
PopupMenuEvent HyperLinkEvent
...
TreeExpansionEvent
ListSelectionEvent
72
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Tipo de evento
Mouse MouseMotion Key Action Window Document Item Container Component Adjustment Focus
X X X X X X X X X X
JTextComponent
JCheckBoxMenuItem JRadioButtonMenuItem X
X X X X X X X X X X X X
X X X X X X X X X X X X
X
X X X X X X X
X X
X X
X
X
X
X X X X X X X X X X X X
X
X X X X X X X X X X X X
73
X X X X X X X
X X X X X X X
X X X X X X X
X X X
X X X X X X
X X X X X X X
X X X X X X X
74
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
KeyListener
keyTyped(KeyEvent) keyPressed(KeyEvent) keyReleased(KeyEvent)
ActionListener
actionPerformed(ActionEvent)
MouseMotionListener
mouseMoved(MouseEvent) mouseDragged(MouseEvent)
75
ListSelectionListener
valueChanged(ListSelectionEvent) g ( )
DocumentListener
insertUpdate(DocumentEvent e) removeUpdate(DocumentEvent e) changedUpdate(DocumentEvent e)
WindowListener
windowActivated(WindowEvent) windowDeactivated(WindowEvent) windowOpened(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent)
76
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
ComponentListener
componentShown(ComponentEvent) componentHidden(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent)
AdjustmentListener
adjustmentValueChanged(AdjustmentEvent)
FocusListener
focusGained(FocusEvent) focusLost(FocusEvent)
...
77
Mtodos
Devuelven informacin adicional sobre el evento P.e. getX(), getY() de MouseEvent, getKeyChar() de KeyEvent, getID() de AWTEvent
78
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
InputEvent
getWhen(), isShiftDown(), isControlDown(), isAltDown() getModifiers() BUTTON1_MASK, BUTTON2_MASK, BUTTON3_MASK
MouseEvent
getClickCount(), getX(), getY()
KeyEvent
getKeyChar(), getKeyString()
ActionEvent
getActionCommand() String getModifiers() ALT_MASK, CTRL_MASK, META_MASK, SHIFT_MASK
WindowEvent
getWindow()
79
DocumentEvent t t
getDocument() Document
ContainerEvent
getChild(), getContainer()
ComponentEvent
getComponent()
AdjustmentEvent
getValue(), getAdjustable() getAdjustmentType() UNIT_INCREMENT, UNIT_DECREMENT, BLOCK_INCREMENT, BLOCK_DECREMENT, TRACK
FocusEvent
80
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
81
Eventos de cambio de estado de componentes: procesar los eventos inmediatamente vs. acceder al estado cuando se necesite
ItemEvent, DocumentEvent, ComponentEvent, ContainerEvent, AdjustmentEvent, etc.
82
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Widgets Swing
Clases predefinidas de componentes estndar
Tipos de componentes
Componentes simples: label, botn Componentes de seleccin: check box, radio button, lista de seleccin, combo box, mens Componentes de texto: campos de texto, reas de texto, texto con estilos Componentes avanzadas: tabla, rbol Contenedores especiales: scroll pane, tabbed pane, split pane Cuadros de dilogo: file chooser, color chooser, pop-ups predefinidos Otras componentes: spinner, scroll bar, slider, progress bar, tool bar Diseo model view en algunas componentes model-view Model
JTextComponent JList JTable
View
Document ListModel TableModel
84
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JLabel
Descripcin
Texto esttico, iconos esttico
Estado y propiedades
JLabel(), JLabel(String), JLabel(String,LEFT|RIGHT|CENTER) JLabel(Icon), JLabel(String,Icon), getText(), setText(String), getIcon(), setIcon(Icon) getAlignment(), setAlignment(LEFT|RIGHT|CENTER)
Operacin
No tiene
85
JButton
Estado y propiedades
Constructores: JButton(), JButton(String) El string se utiliza como etiqueta del botn Cambiar / acceder a la etiqueta: getLabel(), setLabel(String) Botn activo / inactivo: setEnabled(boolean)
Operacin
Emite un ActionEvent al ser pulsado p Identificacin para el evento de accin: setActionCommand(String)
Asocia un string al botn (por defecto, el mismo que la etiqueta) El string formar parte de la informacin incluida en los ActionEvent's emitidos por el botn (ver getActionCommand() de ActionEvent)
86
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Componentes de seleccin
Permiten seleccionar entre una lista de items, emiten ItemEvent, ActionEvent , ListSelectionEvent JCheckBox
It Items seleccionables y d l i bl deseleccionables l i bl Adecuado cuando la lista de tems es fija
JRadioButton
Similar a JCheckBox, seleccin nica
JList
Mltiples modos de seleccin, nmero variable de tems Especialmente adecuado cuando el nmero de tems es muy alto
JComboBox
Similar a JList, ahorro de espacio, seleccin nica
JMenu
Comparable a un combo box de botones, check boxes, y/o radio buttons Permite mens anidados
87
JCheckBox
Descripcin
Botn seleccionable con dos estados: seleccionado / deseleccionado
Estado y p p propiedades
JCheckBox(), JCheckBox(String), JCheckBox(String,boolean) getLabel(), setLabel(String) getState(), setState(boolean)
Operacin
Emite un ActionEvent y un ItemEvent al cambiar de estado El item asociado el ItemEvent es el texto del check box Identificacin del item desde el evento:
getItem() String (texto del check box) getItemSelectable() Object (la componente check box)
88
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JRadioButton
Descripcin
Equivalente a JCheckBox, pero seleccin excluyente Los radio buttons se agrupan creando un ButtonGroup y aadindolos al grupo con add(AbstractButton)
Operacin
Equivalente a JCheckBox Al pulsarlo se emite un ItemEvent extra si, como consecuencia, se deselecciona otro radio button que estaba seleccionado
89
JComboBox
Descripcin
Lista de seleccin desplegable Uno de los elementos de la lista est seleccionado Opcin: dit bl O i editable o ( (por d f t ) no editable defecto) dit bl
Estado y propiedades
JComboBox(), JComboBox(Object[]) addItem(Object), getItemAt(int) Object, getItemCount() getSelectedItem() Object setEditable(boolean)
Operacin
Emite un ActionEvent y un ItemEvent (dos si cambia la seleccin) al seleccionar un item El item asociado al ItemEvent es el item seleccionado
90
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
Descripcin
Lista de seleccin
JList
El modo de seleccin puede ser simple o mltiple Utilizar JScrollPane para barras de scroll
Estado y propiedades
JList(ListModel), JList(Object[]) getModel() ListModel setVisibleRowCount(int) getSelectedIndex() int, getSelectedIndices() int[], setSelectedIndex(int), setSelectedIndices(int[]), getSelectedValue() Object, getSelectedValues() Object[], isIndexSelected(int) boolean setSelectionMode(ListSelectionModel.SINGLE_SELECTION | SINGLE_INTERVAL_SELECTION | MULTIPLE_INTERVAL_SELECTION) DefaultListModel
91
JList (cont)
Estado y propiedades: la clase DefaultListModel
Manejo de la lista de datos asociada al JList addElement(Object) get(int) Object remove(int) ... A diferencia de JComboBox, el uso de ListModel no es opcional
Operacin
Seleccionar / deseleccionar tem: emite ListSelectionEvent ListSelectionListener.valueChanged(ListSelectionEvent e) El mtodo getValueIsAdjusting() del evento devuelve true mientras el usuario est manipulando la seleccin Tambin se emiten ListDataEvents cuando cambian los tems
92
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JMenu
Descripcin
No se aaden a un contenedor, sino a un JMenuBar, o bien como pop-up
Estructura
JMenu(String), JMenuItem(String), JMenuBar() add(JMenuItem), addSeparator() AbstractButton add(JMenu) de JMenuBar setJMenuBar(JMenuBar) de JFrame MenuElement
JComponent
Operacin
Emiten ActionEvent Los tems de tipo check box y radio button se comportan como tales
JMenuItem JMenuBar JPopupMenu
JMenu
JCheckBoxMenuItem
JRadioButtonMenuItem
Los mens pop-up se abren capturando mouse press y llamando a show(Component,int,int) de JPopupMenu
93
Componentes de texto
JLabel
Static Text
94
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JTextComponent
Descripcin
Superclase de JTextField y JTextArea Texto editable, seleccionable
Estado y propiedades
getText(), setText(String) isEditable(), setEditable(boolean) g getCaretPosition(), setCaretPosition(int) (), ( ) getSelectedText(), select(int,int), selectAll(), getSelectionStart(), getSelectionEnd(), setSelectionStart(int), setSelectionEnd(int) copy(), cut(), paste()
95
JTextField
Descripcin
Texto editable de una sola lnea
Operacin
Emite un DocumentEvent cuando se edita el texto Cuando se pulsa 'Enter' emite un ActionEvent con el texto del widget como action command string
96
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JTextArea
Descripcin
Texto editable multilnea JScrollPane para barras de scroll
Operacin
Emite un DocumentEvent cuando se edita el texto No emite ActionEvent's
97
Document
Modelo asociado a componentes de texto
getDocument() de JTextComponent getText(int,int) de Document
API de DocumentListener
insertUpdate(DocumentEvent e) removeUpdate(DocumentEvent e) changedUpdate(DocumentEvent e) // Estilo
98
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JFormattedTextField
Similar a JTextField, pero edicin de texto con formato especfico: fechas, nmeros, porcentajes, moneda, etc.
JEditorPane, JTextPane
Texto con estilos Editores programables (HTML y RTF por defecto)
99
JTable
Descripcin
Datos con estructura tabular Filas seleccionables Opciones por defecto, muy abiertas a especializaciones a medida
Di Dimensiones uniformes por d f t i if defecto Celdas editables o no Rendering y edicin especializados a tipos de datos estndar (nmeros, booleanos, colores, fechas, etc.) Ampliamente extensible y configurable
Estructura y funcionalidades
JTable(TableModel) Los datos a visualizar se definen en el TableModel Para incluir cabeceras de columna, se aaden explcitamente al contenedor getTableHeader() JTableHeader getSelectedRows() int[], getSelectedColumns() int[] Ordenacin estndar: setAutoCreateRowSorter(boolean)
100
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
TableModel
class MyModel extends AbstractTableModel { private String colNames[]; private Object data[][]; MyModel (String names, Object values[][]) { colNames = names; data = values; } public public public public String getColumnName(int col) int getRowCount() int getColumnCount() Object getValueAt(int row, int col) { { { { return return return return colNames[col]; } data.length; } colNames.length; } data[row][col]; }
p public boolean isCellEditable(int row, int col) { return true; } ( , ) ; public void setValueAt(Object value, int row, int col) { data[row][col] = value; fireTableCellUpdated(row, col); } public class getColumnClass(int col) { return data[row][col].getClass() } }
101
JTable (cont)
Operacin
Eventos de seleccin, emitidos por el SelectionModel
JTable getSelectionModel().addSelectionListener(SelectionListener) SelectionListener valueChanged(ListSelectionEvent e)
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JTabbedPane
Panel con pestaas JTabbedPane(), JTabbedPane(int,int) TOP|BOTTOM|LEFT|RIGHT, SCROLL|WRAP_TAB_LAYOUT addTab(String,Component) setSelectedIndex(int)
JSplitPane
Dos componentes contiguas vertical u horizontalmente JSplitPane(int,Component,Component) VERTICAL_SPLIT|HORIZONTAL_SPLIT setOneTouchExpandable(boolean)
103
Cuadros de dilogo
Subclases de Window
Tpicamente destinados a una tarea temporal Subordinados a un JFrame (minimizacin, destruccin) Modalidad
JDialog
Dilogos a medida JDialog(Window), JDialog(Window,String,boolean)
JOptionPane
Dilogos modales simples predefinidos
JFileChooser
Navegacin por el sistema de archivos, seleccin de archivos
JColorChooser
Seleccin de color
104
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JFileChooser
Operacin
showOpenDialog(Component) showSaveDialog(Component) showDialog(Component,String) JFileChooser.APPROVE_OPTION CANCEL_OPTION ERROR_OPTION getSelectedFile() File getSelectedFiles() File[] setSelectedFile(File) getCurrentDirectory File
Ejemplo j p
// ... Tpicamente en un actionPerformed JFileChooser fc = new JFileChooser("C:\\Documents and Settings"); int result = fc.showOpenDialog(this) if (result == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); // ... Abrir file, etc. }
105
JOptionPane
JOptionPane.showMessageDialog (null, "Aviso", "Alert", JOptionPane.ERROR_MESSAGE);
106
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
JOptionPane (cont)
Object[] options = { "OK", "CANCEL" }; JOptionPane.showOptionDialog (null, "Click OK to continue", "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
Object[] possibleValues = { "First", "Second", "Third" }; Object selectedValue = JOptionPane.showInputDialog (null, "Choose one", "Input", JOptionPane.INFORMATION_MESSAGE, null, possibleValues, possibleValues[0]);
107
Contenedores top-level
JFrame, JInternalFrame, JDialog, JApplet Barra de mens
setMenuBar(JMenuBar)
Contenedores raz C t d
getContentPane() Contenedor raz estndar getGlassPane() getRootPane() Superpuesto al content pane, transparente Contiene al menu bar y content pane, no se suele utilizar getLayeredPane() Permite disponer componentes por capas, complejo de utilizar
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
ID de los eventos
Clase de evento vs. tipo de evento
Para obtener ID: getID() de AWTE tID() AWTEvent t
Clase de evento: categora de eventos, engloba conjunto de IDs Las clases contienen constantes que definen los IDs que agrupan p.e. MouseEvent.MOUSE_DRAGGED, ActionEvent.ACTION_PERFORMED
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
MOUSE_MOVED MOUSE_DRAGGED
KeyListener
Entrada de eventos
El sistema AWT captura los mensajes que le enva el sistema de ventanas, crea eventos AWT y los introduce en la cola de eventos (interno) La entrada en cola est optimizada para eliminar redundancias en eventos consecutivos de tipo MOUSE_MOVE, MOUSE_DRAG, PAINT y UPDATE
Pablo Castells
Programacin Orientada a Objetos (3er curso, grupo 31) 6. Interfaces grficas de usuario
03.03.11
MouseEvent ID: MOUSE_PRESSED Click Count: 1 Modifiers: BUTTON1_MASK Point: (342, 206) Time: 925986950380 Source:
Cola de eventos
Sistema AWT
Mensaje Windows ID: WM_LBUTTONDOWN Point: (342, 206) Time: 925986950380 lparam, wparam: ... Window: Wi d
mousePressed ( MouseEvent )
Bucle de eventos
MouseEvent
Componente source
114
Pablo Castells