evento

Anuncio
Tema 7. El AWT (Abstract
Windows Toolkit)
„
Introducción
„
„
„
„
„
„
„
„
„
„
Creación interfaces gráficas
Modelo de eventos
Pasos creación aplicación
Jerarquía de componentes y eventos
Relación componentes – eventos
Interfaces Listener
Clases Adapter
Descripción componentes y eventos
Menús
Layout Managers
1
Introducción
„
AWT:
„
„
„
Evolución:
„
„
„
„
Biblioteca de clases para el desarrollo de interfaces gráficas
de usuario
Problema: La visualización de la interfaz gráfica depende de
la plataforma
Se introdujo en la versión 1.0 → entorno muy simple
Mejora: Cambio en el modelo de eventos en la versión 1.1
Java2 → JFC (Java Foundation Classes)
JFC:
„
„
AWT + Java2D + Accesibilidad + Arrastrar y Soltar + Swing
Swing: Extiende el AWT añadiendo JComponents.
Presentación visual independiente de la plataforma.
2
Creación interfaces gráficas
„
Contenedor (container)
„
„
Componentes
„
„
Ventana donde se situarán los componentes (botones, barras, ...)
Menús, botones de comando, cajas de texto, barras de
desplazamiento, ...
Modelo de eventos
„
„
„
Cada vez que el usuario realiza una acción, se produce un
evento, que el S.O. transmite al AWT.
El AWT crea un objeto de una clase de evento que se transmite a
un método para que lo gestione
El componente que recibe el evento debe registrar previamente
qué objeto se va a encargar de gestionar ese evento
3
Modelo de eventos
„
„
„
„
Los objetos sobre los que se producen los eventos
(event sources) registran los objetos que habrán de
gestionarlos (event listeners)
Los event listeners habrán de disponer de los
métodos adecuados, que serán llamados
automáticamente cuando se produzca el evento
Para que los event listeners dispongan de los
métodos adecuados para gestionar los eventos, se
les obliga a implementar una determinada interface
Listener
Interfaces Listener: se corresponden con los tipos
de eventos que se pueden producir
4
Pasos creación aplicación (1)
Crear una clase InterfazUsuario
Constructor de la clase InterfazUsuario:
1.
2.
1.
2.
3.
4.
5.
Crear componentes (botones, cajas de texto…)
Crear ventana (objeto de la clase Frame)
Asignar distribución a la ventana
Añadir componentes a la ventana y mostrarla
Registrar los gestores de eventos
Crear las clases encargadas de la gestión de
eventos
Crear la clase que contenga el main()
3.
4.
1.
Crear un objeto de la clase InterfazUsuario
5
Pasos creación aplicación (2)
import java.awt.*;
import java.awt.event.*;
class InterfazUsuario
{
public InterfazUsuario()
{
// Crear componentes
};
}
// Crear ventana
Frame miFrame = new Frame("Ventana en Java");
miFrame.setLayout(new FlowLayout());
// Añadir componentes a la ventana
miFrame.add(…);
// Dar tamaño y mostrar ventana
miFrame.setSize(450,150);
miFrame.setVisible(true);
// Registrar gestores de eventos
…
6
Pasos creación aplicación (3)
public class EjemploAwt
{
public static void main(String arg[])
{
InterfazUsuario ventana = new InterfazUsuario();
}
}
7
Jerarquía de componentes
„
java.lang.Object
„
java.awt.Component
„ Button, Canvas, Checkbox, Choice, Label, List, Scrollbar
„
„
TextComponent
„ TextArea, TextField
Container
„ Panel, ScrollPane
„ Window
„ Frame
„ Dialog
FileDialog
8
Componentes del AWT
„
Cualquier Component (excepto Window y los que
derivan de ella) debe ser añadido a un Container
„
„
Para añadir un Component a un Container:
„
„
nombreContainer.add(nombreComponente);
Window es un Container de nivel máximo.
„
„
Un Container puede ser añadido a otro Container
Panel y ScrollPane debe estar dentro de otro Container
Las clases pertenecen al package java.awt
9
Jerarquía de eventos
„
java.lang.Object
„
java.util.EventObject
„
„
„
java.awt.AWTEvent
„ ActionEvent, AdjustmentEvent, ItemEvent, TextEvent
„ ComponentEvent
„ ContainerEvent, FocusEvent, PaintEvent,
WindowEvent
„ InputEvent
KeyEvent, MouseEvent
Todos los eventos corresponden a clases de Java
Las clases están agrupadas en el package
java.awt.event
10
Tipos de eventos
„
„
Eventos de alto nivel
„ ActionEvent: Pinchar sobre botones o elegir comandos en menús
„ AdjustmentEvent: Cambiar valores en barras de desplazamiento
„ ItemEvent: Elegir valores
„ TextEvent: Cambiar el texto
Eventos de bajo nivel
„ ComponentEvent: Mover, cambiar tamaño, mostrar u ocultar un
componente
„ ContainerEvent: Añadir o eliminar un componente del container
„ KeyEvent: Pulsar o soltar una tecla
„ MouseEvent: Mover, arrastrar, pulsar y soltar con el ratón
„ FocusEvent: Obtener o perder el focus
„ WindowEvent: Acciones sobre una ventana
11
Componentes y eventos (i)
Component Eventos
Significado
Button
ActionEvent
Pinchar en el botón
Checkbox
ItemEvent
Seleccionar o deseleccionar un item
Choice
ItemEvent
Seleccionar o deseleccionar un item
ComponentEvent
Mover, cambiar tamaño, mostrar u
ocultar un componente
FocusEvent
Obtener o perder el focus
KeyEvent
Pulsar o soltar una tecla
MouseEvent
Mover, arrastrar, pulsar y soltar con el
ratón
ContainerEvent
Añadir o eliminar un componente de un
container
12
Component
Container
Componentes y eventos (ii)
Component
Eventos
Significado
List
ActionEvent
Hacer doble click sobre un item de la
lista
ItemEvent
Seleccionar o deseleccionar un item
de la lista
MenuItem
ActionEvent
Seleccionar un item de un menú
Scrollbar
AdjustmentEvent
Cambiar el valor de la scrollbar
TextComponent TextEvent
Cambiar el texto
TextField
ActionEvent
Terminar de editar un texto pulsando
Intro
Window
WindowEvent
Abrir, cerrar, minimizar, ...
13
Interfaces Listener
„
Cada objeto que puede recibir un evento (event
source) registra uno o más objetos para que los
gestionen (event listener):
„
„
„
„
„
eventSourceObject.addEventListener(eventListenerObject);
La clase del eventListenerObject deberá implementar una
interface Listener determinada
Esta interface proporcionará la declaración de los métodos
que serán llamados cuando se produzca el evento
La interface a implementar depende del tipo de evento
Una vez registrado el objeto que gestionará el
evento, se deberán definir todos los métodos de la
interface.
„
Algunos podrán dejarse vacíos
14
Interfaces Listener y eventos (i)
Evento
Interface Listener Métodos de Listener
ActionEvent
ActionListener
actionPerformed()
AdjustmentEvent
AdjustmentListener
adjustmentValueChanged()
ComponentEvent
ComponentListener
componentHidden(),
componentMoved(),
componentResized(),
componentShown()
ContainerEvent
ContainerListener
componentAdded(),
componentRemoved()
FocusEvent
FocusListener
focusGained(), focusLost()
ItemEvent
ItemListener
itemStateChanged()
15
Interfaces Listener y eventos (ii)
Evento
Interface Listener
Métodos de Listener
KeyEvent
KeyListener
keyPressed(), keyReleased(),
keyTyped()
MouseListener
mouseClicked(),mouseEntered(),
mouseExited(), mousePressed(),
mouseReleased()
MouseMotionListener
mouseDragged(),mouseMoved()
TextListener
textValueChanged()
WindowListener
windowActivated(),
windowDeactivated(),
windowClosed(), windowClosing(),
windowIconified(),
windowDeiconified(), windowOpened()
MouseEvent
TextEvent
WindowEvent
16
Ejemplo (i)
class InterfazUsuario
{
public InterfazUsuario()
{
// Se crea una ventana
Frame miFrame = new Frame("Ventana en Java");
miFrame.setLayout(new FlowLayout());
miFrame.setSize(450,150);
miFrame.setVisible(true);
};
// Se registran los receptores de eventos
miFrame.addWindowListener(new CerrarVentana());
}
17
Ejemplo (ii)
class CerrarVentana implements WindowListener
{
public void windowActivated(WindowEvent we){}
public void windowClosed(WindowEvent we){}
public void windowClosing(WindowEvent we){ System.exit(0);}
public void windowDeactivated(WindowEvent we){}
public void windowDeiconified(WindowEvent we){}
public void windowIconified(WindowEvent we){}
public void windowOpened(WindowEvent we){}
};
18
Ejemplo (iii)
public class EjemploVentana
{
public static void main(String arg[])
{
InterfazUsuario ventana =
new InterfazUsuario();
}
}
19
Clases Adapter
„
Hay 7 clases Adapter:
„
„
„
ComponentAdapter, ContainerAdapter, FocusAdapter,
KeyAdapter, MouseAdapter, MouseMotionAdapter,
WindowAdapter
Son clases predefinidas que contienen definiciones
vacías para todos los métodos de la interface
Listener correspondiente
Para crear un objeto que responda al evento, en vez
de crear una clase que implemente la interface
Listener, basta crear una clase que derive de la
clase Adapter correspondiente y redefina los
métodos de interés
20
Ejemplo
class CerrarVentana extends WindowAdapter
{
public void windowClosing(WindowEvent we){ System.exit(0);}
}
21
Usando una clase anónima
class InterfazUsuario
{
public InterfazUsuario()
{
// Se crea una ventana
Frame miFrame = new Frame("Ventana en Java");
miFrame.setLayout(new FlowLayout());
miFrame.setSize(450,150);
miFrame.setVisible(true);
};
// Se registran los receptores de eventos
miFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){System.exit(0);}});
}
22
Clase Component
„
Clase abstract de la que derivan todas las clases del
AWT
„
„
Sus métodos son heredados por todos los componentes del
AWT
Métodos interesantes:
„
„
„
„
„
void setVisible(boolean) → muestra el componente
Dimension getSize(), void setSize(int w, int h)
„ Dimension posee 2 variables miembro: height y width
void setBackground(Color), void setForeground(Color)
void paint(Graphics), void repaint(), void update(Graphics)
boolean isEnabled(), void setEnabled(boolean)
23
AWTEvent y ComponentEvent
„
Clase AWTEvent:
„
Hereda de EventObject el método:
„
„
„
Object getSource();
Devuelve una referencia al objeto que generó el evento
Clase ComponentEvent:
„
„
Los eventos se generan cuando un Component
se muestra, oculta o cambia de posición o tamaño
Component getComponent() → devuelve el
componente que generó el evento
24
Clase InputEvent
„
„
De esta clase descienden los eventos del ratón y del
teclado
Define constantes para saber qué teclas o botones
estaban pulsados:
„
„
SHIFT_MASK, ALT_MASK, CTRL_MASK, BUTTON1_MASK,
BUTTON2_MASK, BUTTON3_ MASK
Métodos interesantes:
„
„
boolean isShiftDown(), boolean isAltDown(), boolean
isControlDown()
int getModifiers() → obtiene una máscara de bits sobre las
teclas y botones pulsados
25
Clase MouseEvent
„
Se produce este evento:
„
„
„
Los métodos de la interface MouseListener se relacionan
con estas acciones, siendo:
„
„
void mouseClicked(MouseEvent), void mouseEntered(MouseEvent),
void mouseExited(MouseEvent), void mousePressed(MouseEvent),
void mouseReleased(MouseEvent)
Métodos interesantes de MouseEvent:
„
„
Cuando el ratón entra o sale de un componente visible
Al pinchar, al pulsar o soltar un botón
Point getPoint(), int getX(), int getY()
La interface MouseMotionListener está relacionada con
el movimiento del ratón:
„
void mouseMoved(MouseEvent), void mouseDragged(MouseEvent)
26
Clase Container
„
„
„
Sus métodos son heredados por las clases
Frame y Panel
Los containers mantienen una lista de los
objetos que se les añaden
Métodos interesantes:
„
„
„
„
Component add(Component)
Component getComponent(int)
void remove(Component), void remove(int), void
removeAll()
void setLayout(LayoutManager)
27
Clase ContainerEvent
„
„
Los ContainerEvents se producen
cada vez que un Component se añade
o se retira de un Container
Métodos:
„
Component getChild()
„
„
Devuelve el Component añadido o eliminado
Container getContainer()
„
Devuelve el Container que generó el evento
28
Clases Window y WindowEvent
„
Clase Window
„
„
„
Son ventanas de máximo nivel, pero sin bordes y sin barra
de menús
Son más interesantes las clases que derivan de ellas: Frame
y Dialog
Clase WindowEvent
„
„
„
„
Se produce cuando se abre, cierra, minimiza, restaura,
activa o desactiva una ventana
La interface WindowListener indica los métodos para
responder a este evento
Su uso más frecuente es para cerrar ventanas
El método Window getWindow() devuelve la ventana que
generó el evento
29
Clases Frame y Dialog
„
Clase Frame
„
„
Ventana con borde que puede tener barra de
menús
Métodos interesantes:
„
„
„
„
Frame(), Frame(String title)
String getTitle(), void setTitle(String)
void setMenuBar(MenuBar)
Clase Dialog
„
„
„
Ventana que depende de una Frame
Existen diálogos modal y no modal (por defecto)
Constructor:
„
Dialog(Frame fr, String title, boolean mod)
30
Clase FileDialog
„
„
„
„
Muestra una ventana de diálogo en la que se puede
seleccionar un fichero
Deriva de Dialog
Las constantes enteras LOAD y SAVE definen el
modo de apertura
Métodos interesantes:
„
„
„
„
FileDialog(Frame parent, String title, int mode)
int getMode(), void setMode(int mode)
String getDirectory(), String getFile()
void setDirectory(String dir), void setFile(String file)
31
Clase Panel
„
Es un Container de propósito general
„
„
„
„
Constructores:
„
„
Se puede utilizar para contener otras
componentes
Por defecto el Layout Manager es FlowLayout
Los Applets son subclases de Panel
Panel(), Panel(LayoutManager miLM)
Un Panel puede contener otros Panel
32
Clase Button
„
„
„
„
Al pinchar sobre un botón se genera un evento de la clase
ActionEvent
El aspecto depende de la plataforma, pero la
funcionalidad es la misma
Se puede cambiar el texto y la fuente que aparecen, así
como el color de fondo y del texto
Métodos:
„
„
„
„
Button(String label), Button()
void setLabel(String str), String getLabel()
void addActionListener(ActionListener al)
void setActionCommand(String cmd), String getActionCommand()
→ establece y recupera un nombre para el botón
33
Clase ActionEvent
„
Estos eventos se producen:
„
„
„
„
„
pinchar con el ratón en un botón
elegir un comando de un menú
hacer doble clic en un elemento de la lista
pulsar Intro para introducir un texto en una caja de texto
String getActionCommand()
„
„
Al
Al
Al
Al
Devuelve el texto asociado con la acción que provocó el
evento
int getModifiers()
„
„
„
Devuelve un entero representando una constante definida
en ActionEvent (SHIFT_MASK, CTRL_MASK, META_MASK,
ALT_MASK)
Permite saber qué tecla se pulsó mientras se clicaba
Ej: actionEvent.getModifiers() & ActionEvent.CTRL_MASK
34
Ejemplo Botón (1)
class InterfazUsuario
{
public InterfazUsuario()
{
Button miBoton = new Button("Pulsame");
Frame miFrame = new Frame("Ventana en Java");
miFrame.setLayout(new FlowLayout());
miFrame.add(miBoton);
miFrame.setSize(450,150);
miFrame.setVisible(true);
GestorBoton miGestor = new GestorBoton();
miBoton.addActionListener(miGestor);
miFrame.addWindowListener(new CerrarVentana());
}
};
35
Ejemplo Botón (2)
class GestorBoton implements ActionListener
{
public void actionPerformed(ActionEvent evt){
System.out.println("Boton pulsado");
}
};
class CerrarVentana extends WindowAdapter
{
public void windowClosing(WindowEvent we){
System.exit(0);}
};
public class EjemploAwt
{
public static void main(String arg[])
{
InterfazUsuario ventana = new InterfazUsuario();
}
}
36
Clase Canvas (1)
„
„
„
Un Canvas es una zona en la que se puede
dibujar y mostrar imágenes.
Constructor: Canvas()
Métodos
„
„
„
paint(): contendrá el código para dibujar
repaint(): llama a paint()
Eventos
„
„
No tiene eventos propios
Los hereda de Component
37
Clase Canvas (2)
class MiCanvas extends Canvas
{
};
public void paint(Graphics g)
{
g.drawLine(10,10,100,100);
}
class InterfazUsuario
{
public InterfazUsuario()
{
…
MiCanvas c = new MiCanvas();
…
c.repaint();
};
}
38
Clases Checkbox y
CheckboxGroup
„
Clase Checkbox:
„
„
„
„
Los objetos de Checkbox son botones de opción con 2
posibles valores: on y off
Al cambiar la selección de un Checkbox se produce un
ItemEvent
Cuando el usuario actúa sobre un Checkbox se ejecuta el
método itemStateChanged() → método de la interface
ItemListener
Clase CheckboxGroup:
„
„
„
Permite agrupar varios Checkbox de modo que sólo uno
esté en on
Checkbox(String,boolean,CheckboxGroup)
Al seleccionar un Checkbox de un grupo se producen 2
eventos: 1 por el elemento que se ha seleccionado y otro
por el que ha perdido la selección
39
Clase ItemEvent
„
Se produce cuando cambian de estado:
„
„
„
„
„
„
Checkbox
CheckboxMenuItem
Choice
List
Estos componentes implementan la interface
ItemSelectable
Métodos:
„
„
ItemSelectable getItemSelectable() → devuelve el objeto
ItemSelectable donde se originó el evento
int getStateChange() → devuelve la constante SELECTED
o DESELECTED
40
Clase Choice
„
„
Permite elegir un ítem de una lista desplegable
Genera el evento ItemEvent al seleccionar un ítem de
la lista
„
„
Un índice permite determinar un elemento de la lista (se
empieza desde 0)
Métodos:
„
„
„
„
„
„
„
Choice()
void add(String)
void insert(String,int)
int getSelectedIndex(), String getSelectedItem()
String getItem(int)
void select(int), void select(String)
void removeAll(), void remove(int), void remove(String)
41
Clase Label
„
„
„
Introduce en un container un texto no
seleccionable y no editable
Define las constantes CENTER, LEFT y RIGHT
para alinear el texto
Métodos:
„
„
„
Label(String), Label(String,int)
void setAlignement(int), int getAlignement()
void setText(String), String getText()
42
Clase List
„
„
Se diferencia de Choice en que se muestran varios
ítems a la vez y se permite la selección múltiple
Eventos que generan:
„
„
„
ActionEvent → al pinchar 2 veces sobre un ítem o al pulsar
return
ItemEvent → al seleccionar o deseleccionar un ítem (al
gestionarlo se puede consultar si el usuario estaba pulsando
alguna tecla para hacer una selección múltiple)
Métodos:
„
„
„
List(), List(int nl), List(int nl, boolean mult)
void add(String), void add(String,int)
int getSelectedIndex(), int[] getSelectedIndexes(), String
getSelectedItem(), String[] getSelectedItems()
43
Clase Scrollbar
„
Barra de desplazamiento:
„
„
„
„
Constantes:
„
„
HORIZONTAL, VERTICAL → indican la posición de la barra
Al cambiar el valor de la Scrollbar se produce un
AdjustmentEvent
„
„
Posee un cursor que permite introducir y modificar valores
Define un rango entre un mínimo y un máximo
Permite incrementos pequeños y grandes
Se ejecuta el único método de la interface
AdjustmentListener → adjustmentValueChanged()
Métodos:
„
„
Scrollbar(), Scrollbar(int pos)
int getValue(), void setValue()
44
Clase AdjustmentEvent
„
Se produce cada vez que se cambia el valor de una
Scrollbar. Tipos:
„
„
„
„
TRACK: se arrastra el cursor
UNIT_INCREMENT, UNIT_DECREMENT: se pincha en
las flechas
BLOCK_INCREMENT, BLOCK_DECREMENT: se pincha
delante o detrás del cursor
Métodos:
„
„
„
Adjustable getAdjustable() → devuelve el Component que
generó el evento
int getAdjustementType() → devuelve el tipo de evento
int getValue() → devuelve el valor de la barra
45
Clase ScrollPane
„
„
Ventana en la que se puede mostrar un componente
de mayor tamaño con 2 Scrollbars (horizontal y
vertical)
Constantes:
„
„
„
SCROLLBARS_AS_NEEDED (defecto),
SCROLLBARS_ALWAYS, SCROLLBARS_NEVER
No genera eventos
Métodos:
„
„
ScrollPane(), ScrollPane(int)
void setScrollPosition(int x, int y), void
setScrollPosition(Point p), Point getScrollPosition() →
establece u obtiene la posición del componente
46
Clases TextArea y TextField
„
Heredan de TextComponent y muestran texto seleccionable y
editable
„
TextField sólo puede tener 1 línea.
Ej: TextField t=new TextField(“Hola”);
t.setText(“otro texto”);
„
TextArea puede tener varias líneas.
Ej: TextArea ta=new TextArea(“area de texto”, 10,20);
ta.append(“añade más texto”);
ta.setText(“sustituye texto”);
„
Eventos:
„
„
„
TextField genera ActionEvents → se produce cuando el usuario
pulsa Intro
TextField y TextArea pueden recibir TextEvents(de
TextComponent) → se produce cada vez que se modifica el texto
Pueden recibir los eventos de Component: FocusEvent,
MouseEvent y KeyEvent
47
Clases TextEvent y KeyEvent
„
Clase TextEvent:
„
„
„
Se produce al modificarse el texto
La interface TextListener tiene un único método: void
textValueChanged(TextEvent te)
Clase KeyEvent:
„
„
„
„
Se produce al pulsar sobre el teclado.
Hay dos tipos de KeyEvent:
„ KEY_TYPED: introducción de un carácter Unicode
„ KEY_PRESSED y KEY_RELEASED: pulsar o soltar una tecla
VKC(Virtual KeyCodes): constantes que se corresponden con las
teclas físicas del teclado (sin minúsculas). Se indican con el prefijo
VK (ef: VK_A) → vienen definidas como ctes.
char getKeyChar(), int getKeyCode()
48
Ejemplo TextField (1)
class InterfazUsuario
{
public InterfazUsuario()
{
Button miBoton = new Button("Pulsame");
TextField miCampoTexto = new TextField("Texto inicial");
Frame miFrame = new Frame("Ventana en Java");
miFrame.setLayout(new FlowLayout());
miFrame.add(miBoton);
miFrame.add(miCampoTexto);
miFrame.setSize(450,150);
miFrame.setVisible(true);
GestorBoton miGestor = new GestorBoton(miCampoTexto);
miBoton.addActionListener(miGestor);
miFrame.addWindowListener(new CerrarVentana());
}
};
49
Ejemplo TextField (2)
class GestorBoton implements ActionListener
{
TextField campoTexto;
public GestorBoton(TextField txt)
{
campoTexto=txt;
}
};
public void actionPerformed(ActionEvent evt)
{
campoTexto.setText("Boton pulsado");
}
50
Menús
„
java.lang.Object
„ java.awt.MenuComponent
„ MenuBar
„ MenuItem
„
„
„
CheckboxMenuItem
Menu
„ PopupMenu
Creación de un menú:
„
„
„
1º se crea una MenuBar, después se crean los Menus y los
MenuItem
Los MenuItems se añaden al Menu, los Menus se añaden
a la MenuBar y la MenuBar se añade a un Frame
Puede añadirse un Menu a otro Menu
51
Clase MenuShortcut
Representa las teclas aceleradoras que
pueden utilizarse para activar los menús
desde teclado
„
1.
2.
„
Se establece un Shortcut con el constructor
MenuShortcut(int vk_key)
Se le pasa al constructor de MenuItem
Los menús están restringidos al uso de la
tecla CTRL (no se incluye en el constructor)
52
Clases MenuBar y Menu
„
Clase MenuBar
„
„
„
„
„
Se le añaden objetos Menu
MenuBar()
void add(Menu)
void remove(int index), void remove(MenuComponent m)
Clase Menu
„
„
„
Se le pueden introducir objetos MenuItem, Menu,
CheckboxMenuItem y separadores
Menu(String)
void add(String), void add(MenuItem), void addSeparator(),
void insertSeparator(int index)
53
Clase MenuItem
„
„
Representan las opciones del menú
Eventos:
„
„
„
Al seleccionar un objeto MenuItem se generan eventos del
tipo ActionEvent
Para cada ítem de un Menu se puede definir un
ActionListener, que define el método actionPerformed()
Métodos:
„
„
„
MenuItem(String), MenuItem(String,MenuShortcut)
String getLabel(), void setLabel(String)
void setShortcut(MenuShortcut)
54
Clase CheckboxMenuItem
„
„
„
Son items de un menú que pueden estar
activados o no.
Genera un ItemEvent(como la clase
Checkbox)
Métodos:
„ CheckboxMenuItem(String, [boolean])
„ boolean getState(), void
setState(boolean)
55
Ejemplo Menu (1)
Constructor InterfazUsuario:
MenuItem mnuItemAbrir = new MenuItem("Abrir");
MenuItem mnuItemSalir = new MenuItem("Salir");
GestorMenuArchivo gestorMenu = new GestorMenuArchivo();
mnuItemAbrir.addActionListener(gestorMenu);
mnuItemSalir.addActionListener(gestorMenu);
Menu mnuArchivo = new Menu("Archivo");
mnuArchivo.add(mnuItemAbrir);
mnuArchivo.addSeparator();
mnuArchivo.add(mnuItemSalir);
MenuBar mnuBar = new MenuBar();
mnuBar.add(mnuArchivo);
Frame miFrame = new Frame("Ejemplo menu");
miFrame.setSize(250,250);
miFrame.setMenuBar(mnuBar);
miFrame.setVisible(true);
miFrame.addWindowListener(new CerrarVentana());
56
Ejemplo Menu (2)
class GestorMenuArchivo implements ActionListener
{
public void actionPerformed (ActionEvent evt)
{
String item = ((MenuItem)evt.getSource()).getLabel();
if (item == "Salir")
{
System.exit(0);
}
else{
System.out.println(item);
}
}
}
57
Menús emergentes
„
„
Son menús que aparecen al pulsar con el
botón dcho. del ratón sobre un Component
Métodos:
„
„
„
„
PopupMenu(), PopupMenu(String title)
void show(Component origin, int x, int y)
Se pueden utilizar los métodos de la clase
Menu
Para mostrar el menú:
„
„
Registrar el MouseListener
Definir el método mouseClicked()
58
Ejemplo emergente (1)
public InterfazUsuario():
MenuItem mnuItemAbrir = new MenuItem("Abrir");
MenuItem mnuItemSalir = new MenuItem("Salir");
GestorMenuArchivo gestorMenu = new GestorMenuArchivo();
mnuItemAbrir.addActionListener(gestorMenu);
mnuItemSalir.addActionListener(gestorMenu);
PopupMenu mnuArchivo = new PopupMenu("Archivo");
mnuArchivo.add(mnuItemAbrir);
mnuArchivo.addSeparator();
mnuArchivo.add(mnuItemSalir);
Frame miFrame = new Frame("Ejemplo menu");
miFrame.add(mnuArchivo);
miFrame.setSize(250,250);
miFrame.setVisible(true);
miFrame.addMouseListener(new GestorRaton(miFrame,mnuArchivo));
miFrame.addWindowListener(new CerrarVentana());
59
Ejemplo emergente (2)
class GestorRaton extends MouseAdapter
{
Frame unFrame;
PopupMenu unMenuPopup;
GestorRaton(Frame frame, PopupMenu menuPopup)
{
unFrame = frame;
unMenuPopup = menuPopup;
}
public void mousePressed(MouseEvent evt)
{
if((evt.getModifiers() & MouseEvent.BUTTON3_MASK) != 0){
unMenuPopup.show(unFrame,evt.getX(),evt.getY());
}
}
};
60
Layout Managers
„
Un Layout Manager es un objeto que controla
cómo los Components se sitúan en un Container
„
„
AWT define 5:
„
„
„
„
FlowLayout y GridLayout (sencillos)
BorderLayout y CardLayout (especializados)
GridBagLayout (general)
Todos los Containers tienen uno por defecto:
„
„
„
Necesario por la portabilidad
FlowLayout para Panel
BorderLayout para Window (Frame y Dialog)
Métodos:
„
unContainer.setLayout(new GridLayout());
61
FlowLayout
„
„
„
Coloca los componentes una detrás de otro, de izda. a dcha. y
de arriba abajo
Si se cambia el tamaño de la ventana los componentes se
redistribuyen
Constructores:
„
„
„
„
FlowLayout();
FlowLayout(int alignement);
FlowLayout(int alignement, int horGap, int verGap);
„ Alineación: LEFT, CENTER, RIGHT
„ Distancia horizontal y vertical entre componentes → 5 píxeles
por defecto
Añadir componentes:
„
„
„
miFrame.add(new Button(“Button 1”));
miFrame.add(new Button(“2”));
…
62
BorderLayout
„
Define 5 áreas:
„
„
„
Los componentes añadidos en cada zona tratan de
ocupar todo el espacio disponible
Constructores:
„
„
„
North, South, East, West y Center
BorderLayout();
BorderLayout(int horGap, int verGap)
Al añadir un componente se debe especificar la zona:
„
„
„
miFrame.add(new Button(“North”),“North”);
miFrame.add(new Button(“South”), BorderLayout.SOUTH);
…
63
GridLayout
„
Los componentes se colocan en una matriz de celdas
„
„
„
Constructores:
„
„
„
Todas las celdas tienen el mismo tamaño
Cada componente utiliza todo el espacio disponible en su
celda
GridLayout(int nfil,int ncol);
GridLayout(int nfil,int ncol, int horGap, int verGap);
Añadir componentes:
„
„
„
„
miFrame.add(new Button(“Button 1”));
miFrame.add(new Button(“2”));
…
miFrame.add(new Button(“Button 5”));
64
CardLayout
„
„
„
Permite disponer distintos componentes que compartan la
misma ventana para ser mostrados sucesivamente
Es similar a “cartas” que van apareciendo una tras otra. Se
puede establecer el orden en que se muestran
Constructores:
„
„
Para añadir componentes:
„
„
CardLayout(), CardLayout(int horGap, int verGap)
unContainer.add(Component comp, int index)
Para controlar el orden en que aparecen las cartas:
„
void first(Container), void last(Container), void previous(Container),
void next(Container), void show(Container, String)
65
Ejemplo CardLayout
„
Ejemplo:
CardLayout miCard=new CardLayout();
Panel p=newPanel();
p.setLayout(miCard);
p.add(new Button(“Primera carta”), “primera”);
p.add(new TextField(“Segunda carta”), “segunda”);
„
Mostrar la primera:
miCard.first(p);
„
Mostrar siguiente:
miCard.next(p);
„
Mostrar por nombre:
miCard.show(p, “segunda”);
66
GridBagLayout (i)
„
„
Es el más completo y flexible
Parte de una matriz de celdas
„
„
„
Las filas pueden tener distinta altura y las columnas distinta
anchura
Una componente puede ocupar varias celdas
La posición y tamaño de cada componente se
especifica por medio de restricciones (constraints)
„
Las restricciones se establecen creando un objeto de la clase
GridBagConstraints, dando valor a sus propiedades y
asociando el objeto con el componente mediante el método
setConstraints()
67
GridBagLayout (ii)
„
Variables miembro de GridBagConstraints:
„
„
„
int gridx, gridy → fila y columna en la que se sitúa la
esquina superior izquierda del componte
int gridwidth, gridheight → nº de filas y columnas que
ocupa el componente
Ejemplo:
GridBagLayout unGBL = new GridBagLayout();
GridBagConstraints unasConstr = new GridBagConstraints();
unContainer.setLayout(unGBL);
// Se crea un componente unComp
// Se establecen las propiedades de unasConstr
unGBL.setConstraints(unComp,unasContr);
unContainer.add(unComp);
68
Combinación layouts
69
Combinación layouts
class InterfazUsuario
{
public InterfazUsuario()
{
Panel miPanel = new Panel (new FlowLayout());
miPanel.add(new Button("1"));
miPanel.add(new Button("2"));
miPanel.add(new Button("3"));
TextArea texto=new TextArea();
Frame miFrame = new Frame("Ventana en Java");
miFrame.setLayout(new BorderLayout());
miFrame.add(texto, BorderLayout.CENTER);
miFrame.add(miPanel,BorderLayout.SOUTH);
miFrame.setSize(450,150);
miFrame.setVisible(true);
miFrame.addWindowListener(new CerrarVentana());
}
};
70
Combinación layouts
71
Combinación layouts
class InterfazUsuario
{
public InterfazUsuario()
{
MiCanvas miObjCanvas=new MiCanvas();
TextArea txtArea=new TextArea();
txtArea.setEditable(false);
Panel panelCentral = new Panel (new GridLayout(1,2));
panelCentral.add(txtArea);
panelCentral.add(miObjCanvas);
TextField txtDatos=new TextField("",40);
Button bot1=new Button("Botón 1");
Button bot2=new Button("Botón 2");
bot2.setEnabled(false);
Panel panelInferior=new Panel(new FlowLayout());
panelInferior.add(txtDatos);
panelInferior.add(bot1);
panelInferior.add(bot2);
72
Combinación layouts
};
}
Frame miFrame = new Frame("Ventana en Java");
miFrame.setLayout(new BorderLayout());
miFrame.add(panelCentral, BorderLayout.CENTER);
miFrame.add(panelInferior,BorderLayout.SOUTH);
miFrame.setSize(450,150);
miFrame.setVisible(true);
miFrame.addWindowListener(new CerrarVentana());
73
Descargar