Академический Документы
Профессиональный Документы
Культура Документы
Elementos de Swing
Java
• Tecnología Swing • Componentes y contenedores
– NetScape (IFC) , IBM, Lighthouse Design
– Componentes. Aspecto visible del interfaz
• JFC
• botones, etiquetas, campos de texto, etc
– AWT, Java 2D, Accesibility, Drag and Drop, Swing
• Se sitúan dentro de algún contenedor
• Cambios importantes desde la versión 1.1 a 1.2
– Versión 1.1 AWT – Contenedores. Almacenes de componentes
– Versión 1.2 en adelante incluyen JFC: SWING • Pueden contener a otros contenedores
– Actualmente, los navegadores no entienden JFC
• Dos tipos
• Swing está apoyado en parte en AWT – Superiores: JApplet, JFrame, JDialog,
• AWT Abstract Window Toolkit – Intermedios: JPanel, JScrollPane,
– La librería se encuentra en el paquete java.awt JSplitPane, JTabbedPane, JToolBar y otros
más especializados
1 3
•1
Construcción de un GUI.
Contenedores Superiores II Pasos a seguir
setSize()
setVisible() Component • I. Crear un contenedor superior y obtener su
contenedor intermedio
Container
• II. Seleccionar un gestor de esquemas para el
contenedor intermedio
pack() Window Panel
• III. Crear los componentes adecuados
Dialog setTitle() Frame Applet • IV. Agregarlos al contenedor intermedio
• V. Dimensionar el contenedor superior
• VI. Mostrar el contenedor superior
JDialog JFrame JApplet
getContentPane() getContentPane() getContentPane()
5 7
I. Crear un contenedor
Contenedores Intermedios
superior
Component • Hay tres clases contenedores superiores
add()
– JFrame, JDialog, JApplet
setLayout() Container • JFrame -> Aplicación
– Ventana de nivel superior con bordes y título
– setTitle(),getTitle(),setIconImage()
JComponent • JApplet -> Applets
• JDialog -> Diálogos
JPanel JScrollPane JSplitPane JTabbedPane JToolBar – Métodos de instancia ...
void pack()
Container getContentPane()
•El contenedor más utilizado es JPanel
void setContentPane(Container)
void setJMenuBar(Menu)
6 8
•2
II. Gestor de esquemas IV. Agregar componentes
para cont. intermedio al contenedor
• Determinan como encajan los componentes dentro • Se hace a través del método add() de los
de los contenedores contenedores
JFrame f = new JFrame(“Un ejemplo”);
– Cada contenedor tiene un gestor propio
Container cpane = f.getContetPane();
• Por defecto JPanel tienen BorderLayout cpane.setLayout(new FlowLayout());
– Los gestores (son clases) existentes son: JButton bSi = new JButton(“SI”);
• FlowLayout, BorderLayout, GridLayout, JButton bNo = new JButton(“NO”);
GriBagLayout, CardLayout, BoxLayout, ... JLabel l = new JLabel(“Nombre”);
cpane.add(l);
– Puede no utilizarse el gestor y colocar los elementos cpane.add(bSi);
con setPosition() (no recomendable) cpane.add(bNo);
• Para asignar un gestor de esquemas – El orden es importante
contenedor.setLayout(new FlowLayout()) • A un contenedor intermedio también se le pueden
agregar otros contenedore intermedios
9 11
V. Dimensionar el
III. Crear componentes
contenedor superior I
• Cada componente viene determinado por una clase • Especifica el tamaño del contenedor superior
• Hay que crear un objeto de esa clase • El método a llamar es
void setSize(int anchura, int altura)
JButton bSi = new JButton(“SI”);
JButton bNo = new JButton(“NO”);
JLabel l = new JLabel(“Nombre”);
... JFrame f = new JFrame(“Un ejemplo”);
....
f.setSize(int anchura, int altura)
10 12
•3
V. Dimensionar el
Ejemplo GUI
contenedor superior II
import java.awt.*;
• Una alternativa a utilizar el método setSize()es import javax.swing.*;
el método pack(), que calcula el tamaño de la class GUI01 {
ventana teniendo en cuenta public static void main(String [] args) {
JFrame f = new JFrame(“Un ejemplo·);
– El gestor de esquemas Container cpane = f.getContetPane();
– El número y orden de los componentes añadidos cpane.setLayout(new FlowLayout());
JButton bSi = new JButton(“SI”);
– La dimensión de los componentes (preferida) JButton bNo = new JButton(“NO”);
• void setPreferredSize(Dimension) JLabel l = new JLabel(“Nombre”);
• void setMinimunSize(Dimension) cpane.add(l);
• void setMaximumSize(Dimension)
cpane.add(bSi);
JFrame f = new JFrame(“Un ejemplo”);
cpane.add(bNo);
.... f.pack();
f.pack() f.setVisible(true);
}
}
13 15
14 16
•4
Ejemplo GUI Iconos
17 19
18 20
•5
Otros aspectos FlowLayout
21 23
•6
BorderLayout BoxLayout
•7
GUI Complejos II JScrollPane II
import java.awt.*;
JFrame f = new JFrame(“Un ejemplo·); import javax.swing.*;
f.getContentPane(new BorderLayout()); class GUISP {
JPanel p = new JPanel(); public static void main(String [] args) {
JButton bp1 = new JButton(“Panel1”); JFrame frame = new JFrame("Un ejemplo");
JButton bp2 = new JButton(“Panel2”); ImageIcon ii = new ImageIcon("carapin.gif");
JLabel label = new JLabel(ii);
p.setLayout(new GridLayout(2,1)); ScrollPane scrollPane = new ScrollPane(label);
p.add(bp1); frame.getContentPane().add(scrollPane);
p.add(bp2); frame.pack();
frame.setVisible(true);
... }
}
f.getContentPane().add(p,BorderLayout.WEST);
...
Ejercicio: jugar con setVisible
GUI03.java
29 31
JScrollPane I JSplitPane I
30 32
•8
JSplitPane II JTabbedPane
import java.awt.*; ImageIcon icon = new ImageIcon("images/middle.gif");
import javax.swing.*; JTabbedPane tabbedPane = new JTabbedPane();
class GUISiP { Component panel1 = makeTextPanel("Blah");
public static void main(String [] args) {
tabbedPane.addTab("One", icon, panel1, "Does nothing");
jFrame frame = new JFrame("Un ejemplo");
ImageIcon ii = new ImageIcon("carapin.gif"); tabbedPane.setSelectedIndex(0);
JLabel label1 = new JLabel(ii); Component panel2 = makeTextPanel("Blah blah");
JLabel label2 = new JLabel("Cara bonita"); tabbedPane.addTab("Two", icon, panel2, "Does twice as much");
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, Component panel3 = makeTextPanel("Blah blah blah");
label1,label2);
tabbedPane.addTab("Three", icon, panel3, "Still does nothing");
splitPane.setOneTouchExpandable(true);
frame.getContentPane().add(splitPane); Component panel4 = makeTextPanel("Blah blah blah blah");
frame.pack(); tabbedPane.addTab("Four", icon, panel4, "Does nothing at all");
frame.setVisible(true);
}
}
33 35
JTabbedPane I JToolBar I
•9
JToolBar II Componentes II setToolTips()
setBorder()
setEnable()
JToolBar toolBar = new JToolBar();
JButton button = null; JComponent setVisible()
setBackground()
button = new JButton(new ImageIcon("images/left.gif")); ... ....
toolBar.add(button);
button = new JButton(new ImageIcon("images/middle.gif"));
JList JComboBox JMenuBar JFileChooser
toolBar.add(button);
button = new JButton(new ImageIcon("images/right.gif"));
JOptionPane
toolBar.add(button);
pane.add(toolBar,BorderLayout.NORTH);
JTextArea JTextField
37 39
•10
Bordes I JButton
Bordes II JLabel
• Para cambiar el borde de un componente • Es una etiqueta con una línea de texto.
– public void setBorder(Border) • Constructores
JButton b = new JButton(“Aceptar”); JLabel([String,] [Icon,] [int])
b.setBorder(new TitledBorder(“Boton”))
Constantes
• La clase javax.swing.BorderFactory tiene LEFT RIGHT CENTER
métodos de clase para crear bordes • Métodos de instancia
String getText()
– Múltiples peticiones de crear un mismo borde
void setText(String)
devuelven el mismo borde.
...
JButton b = new JButton(“Aceptar”);
b.setBorder(BorderFactory.createTitleBorder(“Boton”))
42 44
•11
JCheckBox Ejemplo con botones I
import java.awt.*;
import javax.swing.*;
• Marcadores class GUI04 {
• Constructores public static void main(String [] args) {
JCheckBox([String,] [Icon,] [boolean]) JFrame f = new JFrame("Ejemplo de Botones");
JRadioButtons y
Ejemplo con botones II
ButtonGroup JPanel prb = new JPanel();
prb.setLayout(new GridLayout(2,1));
• Botones circulares prb.add(cp1);
prb.add(cp2);
• Se agrupan de manera que sólo uno esté pulsado
• Constructores Container contP = f.getContentPane();
contP.add(bNorte,BorderLayout.NORTH);
JRadioButtons([String,] [Icon,] [boolean])
contP.add(lSur,BorderLayout.SOUTH);
• Métodos de instancia contP.add(cEste,BorderLayout.EAST);
Igual que JCheckBox contP.add(prb,BorderLayout.WEST);
contP.add(bCentro,BorderLayout.CENTER);
• Para agruparlos, se crea una instancia de ButtonGroup y se f.pack();
añaden con add(AbstractButton) f.setVisible(true);
}
}
46 48
•12
JTextField Jlist I
• Permite editar texto en una línea. • Muestra una lista de elementos para su selección.
• Constructores • Constructores
JTextField ([String,] [int]) JList() JList(Object [])
• Métodos JList(Vector) JList(ListModel)
String getText() • Métodos de instancia
String getText(int,int) // offset y len int getSelectedIndex() // -1 si no hay
void setEditable(boolean) int [] getSelectedIndices()
boolean isEditable() Object getSelectedValue()
... Object [] getSelectedValues()
– Tiene una subclase que enmascara el eco (* u otro símbolo) boolean isSelectedIndex(int)
JPasswordField boolean isSelectionEmpty([])
– con un método de instancia void setListData(Object)
char [] getPassword() void setListData(Vector)
49 51
JTextArea JList II
• Permite editar texto en un area. • Métodos de instancia
• Constructores void setSelectionMode(int)
get selectionMode()
JTextArea ([String,] [int,int])
...
• Métodos
void append(String) • Constantes
void insert(String,int) ListSelectionModel.SINGLE_SELECTION
igual que JTextField ListSelectionModel.SINGLE_INTERVAL_SELECTION
... ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
50 52
•13
JComboBox JDialog
Ejercicio JOptionPane I
•14
JOptionPane II JOptionPane IV
•15
Menús Ejemplo de Menú
Menús KeyEvent
• Un item puede ser a su vez un menú • La clase KeyEvent incluye constantes para
– Para añadir a un JMenuBar una entrada acelerar las pulsaciones para llegar a un de un
• void add(JMenu)
– Para añadir a un JMenu JMenuItem
• void add(JMenuItem) – VK_1, VK_2,...
• void add(JMenuItem, MenuShortcut)
• void addSeparator()
– VK_A, VK_B,...
– Para manejar los items y entradas – VK_F1, VK_F2,..
• void setEnabled(boolean)
• boolean isEnabled() • La clase se encuentra en el paquete java.awt.event
add(new JMenuItem(“Entrada”,KeyEvent.VK_E));
• Un CheckBoxMenuItem se puede seleccionar
– boolean getState()
– void setState(boolean)
62 64
•16
PopupMenu El Modelo de Eventos
• Crea menús aislados (en cualquier ventana) • Un componente (o menú componente) puede
– JPopupMenu() disparar un evento
• Contiene elementos de menu java.awt.event javax.swing.event
– add(MenuItem) • Cuando un evento se dispara, es recogido por
• Debe activarse en un componente dada una objetos “oyentes” (listeners) que realizan la acción
posición de visualización apropiada
– show(JComponent, int x, int y) • Cada oyente debe pertenecer a una clase que
implemente cierta interface dependiendo del
evento
65 67
• La versión 1.0 incluía un modelo de eventos • Para que un oyente esté pendiente de un
diferente componente, se debe registrar en él
• Desde la versión 1.1 incluye el nuevo modelo de • El registro es realizado a través de un método del
eventos que se mantiene como definitivo en 1.3 componente sobre el que se registra
(incluso para la librería Swing que añade algo) – addXxxxxListener(XxxxxListener)
• Sólo vamos a ver el modelo nuevo • El receptor es el componente que queremos escuchar
• El argumento será el objeto oyente
• XxxxxListener indica la interface que va a implementar
– Por ejemplo, dado la interface ActionListener, un
objeto se registra por medio de
• addActionListener(ActionListener)
66 68
•17
Interfaces en
Eventos
java.awt.event I
Interfaces Métodos
ActionListener actionPerformed(ActionEvent) • Los eventos se implementan como subclases de
AdjustmentListener adjustmentValueChanged(AdjustementEvent) java.util.EventObject
Object getSource()
ComponentListener componentHidden(ComponentEvent)
componentMoved(ComponentEvent) – Los eventos se encuentran en los paquetes
componentResized(ComponentEvent) java.awt.event y javax.swing.event
componentShown(ComponentEvent) • Interfaces XxxxxListener
ContainerListener componentAdded(ContainerEvent)
• Evento EventXxxxx
componentRemoved(ContainerEvent) – Como ya hemos dicho, para registrar a un oyente se
FocusListener focusGained(FocusEvent) utiliza
focusLost(FocusEvent) • Registro addXxxxxListener(XxxxxListener)
ItemListener itemStateChanged(ItemEvent) – Todos los métodos de la interface tendrán como
KeyListener keyPressed(KeyEvent) argumento
keyReleased(KeyEvent) • Evento EventXxxxx
keyTyped(KeyEvent) 69 71
Interfaces en
ActionListener I
java.awt.event II
Interfaces Métodos
MouseListener mouseClicked(MouseEvent)
• Se lanza si:
mouseEntered(MouseEvent) – Se pulsa un botón de cualquier tipo
mouseExited(MouseEvent)
mousePressed(MouseEvent) – Doble pulsación en un item de una lista
mouseReleased(MouseEvent) – Selección de una opción de menú
MouseMotionListener mouseDragged(MouseEvent)
mouseMoved(MouseEvent) – Pulsar retorno en un campo de texto
TextListener textValueChanged(TextEvent) void actionPerformed(ActionEvent)
WindowListener windowActivated(WindowEvent)
windowClosed(WindowEvent) • Ejemplos:
windowClosing(WindowEvent) – GUI01c.java
windowDeactivated(WindowEvent)
windowDeiconified(WindowEvent) • El oyente es la propia ventana
windowIconified(WindowEvent) – y GUI01c1.java
windowOpened(WindowEvent)
70 • El oyente es un objeto con visibilidad 72
•18
ActionListener II ItemListener
73 75
FocusListener KeyListener
void keyReleased(KeyEvent)
• Métodos de KeyEvent
– int getKeyChar(), int getKeyCode(),
– int getModifiersText(), ...
– Define como constante cualquier pulsación. Ver
documentación
74 76
•19
MouseListener MouseMotionListener
• Para actuar con el ratón desde cualquier • Para actuar con los movimientos del ratón
componente (no los movimientos) desde cualquier componente
void mouseClicked(MouseEvent)
void mouseDragged(MouseEvent)
void mouseEntered(MouseEvent)
void mouseExited(MouseEvent) void mouseMoved(MouseEvent)
void mousePressed(MouseEvent)
• MouseInputListener
void mouseReleased(MouseEvent)
javax.swing.event
• MouseEvent – Hereda de ambas
– int getClickCount()
– int getX(), int getY(), Point getPoint()
interfaces
– boolean isPopupTrigger() – Ejemplo GUI10.java
– Define como constante el tipo de pulsación. Ver
documentación.
77 79
MouseListener WindowListener
•20
Clase Anónima para
Adaptadores
WindowAdapter
class Ventana extends JFrame {
• Es tedioso tener que implementar todas las
public Ventana() {
funciones de una interface. super("Eventos de ventana");
– Por ejemplo, de un WindowListener puede interesar addWindowListener(new WindowAdapter() {
sólo el método de cierre, es decir windowClosing. public void windowClosing(WindowEvent e) {
System.exit(0);
– Si se implementa la interface hay que implementar
}
todas las funciones, aunque estén vacías }
• Una solución, los adaptadores );
}
– Son clases que implementan una interface con un
}
comportamiento por defecto.
– Podemos crear nuestros oyentes como subclases de • Ver GUI12a.java
estos adaptadores y redefinir cualquier método.
81 83
82 84
•21
La clase Graphics II Dibujar con Swing
translate(int, int)
85 87
•22
La clase Graphics IV Applets I
89 91
• Las imágenes son objetos de la clase Image • Cualquier applet debe heredar de la clase JApplet
– Para pintar una imagen hay varios métodos • Un applet debe ser una clase pública
drawImage(Image, int, int, int, int ImageObserver)
• No puede acceder a los recursos locales
• El método termina aún cuando la imagen no esté – Certificados
completamente pintada
• ImageObserver es un objeto que es avisado public class SimpleApplet extends JApplets {
cuando termine de pintar la imagen public void init() {
JLabel label = new JLabel("Hola mundo");
– Dos forma de obtener una imagen getContentPane().add(label, BorderLayout.CENTER);
Toolkit.getDefaultToolkit().getImage("dibujos.gif" );
}
(new (ImageIcon(“miImagen.gif”))).getImage();
}
• Ver Imagen.java
90 92
•23
Arrancar un Applets Ejemplo de applets
94 96
•24