vbr awt 01
TRANSCRIPT
1
AWT
IntroducciónComponentes y contenedoresElementos BásicosAdministradores de diseñoVentanasManejo de eventosTipos y auditores de eventoLínea de TrabajoBibliografía
2
Introducción
AWT = Abstract Window Toolkit(Juego de Herramientas de Ventanas Abstracto)
Permite el desarrollo de interfaces gráficas de usuario rápida y fácilmente.Contiene una mezcla de los componentes GUI más simples.La mayoría de sus clases e interfaces se pueden usar en:
appletsaplicaciones
El paquete básico es java.awt.*
3
Componentes y Contenedores
Component: es la superclase del conjunto de clases del AWT.Container: se usa para definir componentes que pueden contener a otros componentes.
java.lang.Object|+--java.awt.Component
|+--java.awt.Container
4
Componentes y Contenedores
Component: incluye métodos para trabajar con manipuladores de eventosimágenesfuentescolores
Container: ofrece métodos para manipular los componentes
añadirrecuperarmostrarcontareliminar trabajar con administradores de diseño
5
La Primera Ventana
import java.awt.*;
import java.awt.event.*;
class Ventana extends Frame{
public Ventana(){
super ("Ejemplo de Ventana");inicializacionComponentes();
addWindowListener(new AdaptadorVentana());
setSize(300,200);
setVisible(true);
}
private void inicializacionComponentes(){ // Establecer Gestor de Posicionamiento
//Crear Componentes Gráficos
// Añadir al contenedor
}
public static void main(String arg[]){
Ventana f = new Ventana();}
private class AdaptadorVentana extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(1);}
}
}
6
Elementos Básicos: Botones
Button (Botón)
Se utilizan para ejecutar alguna acción asociada cuando el usuario lo pulsa.Dos constructores:• Button()• Button(String label)
Ejemplo:
Button boton=new Button(“Aceptar”);
7
Elementos Básicos: Label
Label (Etiqueta)Se utilizan para escribir cadenas de caracteres alineadas dentro de los limites del objeto de este tipo.Tres constructores:• Label()• Label(String label)• Label(String label, int aligment)
Ejemplo:
Label etiqueta=new Label(“Bienvenido”,Label.CENTER);
8
Elementos Básicos: Checkbox
Checkbox (Casilla de verificación)
Representa una casilla de verificación a seleccionar.Para comprobar el estado• getState
Para establecer el estado • setState
Se pueden asociar en grupos dentro de un elemento CheckboxGroup
Ejemplo:
• Nota: grupoCheck es una instancia de un objeto CheckboxGroup
Checkbox check=new Checkbox(“One”,grupoCheck, true);
9
Elementos Básicos: CheckboxGroup
CheckboxGroup (Agrupación de Casilla de verificación)
Agrupa un conjunto de checkbox de manera que sólo se puede seleccionar uno de ellos.Para comprobar la casilla activa• getSelectedCheckBox
Para establecer la casilla activa• setSelectedCheckBox
Ejemplo: CheckboxGroup cbg = new CheckboxGroup();add(new Checkbox("one", cbg, true)); add(new Checkbox("two", cbg, false)); add(new Checkbox("three", cbg, false));
10
Elementos Básicos: Choice
Choice (Selección)Seleccionar una opción de entre varias visualizando solo una de ellas.Para añadir elementos: addItemPara contar los elementos: countItemsPara seleccionar un elemento: selectPara obtener el elemento asignado: getSelectedItemPara establecer el índice del elemento asignado: getSelectedIndex
Ejemplo: Choice colorChooser = new Choice(); colorChooser.add("Green"); colorChooser.add("Red"); colorChooser.add("Blue");
11
Elementos Básicos: TextField
TextField (Campos de texto)
Implementa una zona de entrada de texto en una sola línea.Para cambiar el texto setTextPara obtener el texto getText
Ejemplo:TextField tf1, tf2, tf3, tf4;tf1 = new TextField(); tf2 = new TextField("", 20); tf3 = new TextField("Hello!"); tf4 = new TextField("Hello", 30);
12
Elementos Básicos: TextArea
TextArea (Campos de área de texto)
Implementa una zona de entrada de varias líneas de texto.Incluye su propia barra de desplazamiento.Para cambiar el texto disponemos de métodos: appendText, insertText y replaceText.Para obtener el texto getText.
Ejemplo:new TextArea("Hello", 5, 40);
13
Elementos Básicos: Scrollbar
Scrollbar (Barra de desplazamiento)
Permiten seleccionar un valor entre un mínimo y un máximo determinado.Disponemos de los métodos: getValue, setValue, getMinimum y getMaximum.
Ejemplo:ranger = new Scrollbar(Scrollbar.HORIZONTAL, 0, 60, 0, 300); add(ranger);
14
Administradores de diseño: Descendientes de Container
PanelEs un contenedor genérico que se puede mostrar dentro de applets y aplicaciones.
ScrollPaneEs un contenedor desplazable que puede tener barras de desplazamiento verticales y horizontales.
WindowOfrece unas subclases para las ventanas principales de aplicación, objetos Frame y ventanas Dialog.
• Estas tres clases cumplen la función de hospedar a los componentes ya vistos pudiendo tener asociado un gestor de organización (LayoutManager).
15
Administradores de diseño: Container
Cada Container tiene asociado un administrador de diseño que establece la forma de colocar los componentes dentro de un Container.El administrador de diseño debe implementar la interfaz LayoutManager.
La interfaz LayoutManager2 amplia sus funciones.
Para establecer el LayoutManager se usa el método setLayoutManager del Container.Existen varios administradores de diseño:
FlowLayoutBorderLayoutGridLayoutGridBagLayoutCardLayout
16
Administradores de diseño: Container
Como trabajar con PanelesCreación del panel • Panel p = new Panel ();
Añadir un administrador de diseño al panel• p.setLayout(new FlowLayout());
Añadir los componentes al panel• Label b = new Label(“Dentro del panel”);• p.add(b);
Si no es un root Panel se añade al panel principal como un componente mas• frame.add(p);
ComentariosTodas las ventanas (dialogo - principales) y applet tienen asociado un panel inicialCuando el GUI es complicado los paneles se modelan en clases independientes extendiendo de la clase Panel
17
Administradores de diseño: Container
Ejemplo
//Creación de variables de instanciaprivate Label label1;private Panel p;
...//Creación de un container
p = new Panel(); //Establecer administradores de diseño para los contenedores
this.setLayout(new FlowLayout());p.setLayout(new FlowLayout());
//Creación de componenteslabel1 = new Label("Dentro de un Panel");
//Añadir componentes a los contenedoresp.add(label1);this.add(p);
18
Administradores de diseño: FlowLayout
Se colocan los elementos desde la esquina superior izquierda, de izquierda a derecha y de arriba a abajo.La separación entre componentes puede indicarse en el constructor.
(Redimensionar la ventana para observar la recolocación de los componentes)
//Creación de variables de instancia//this es la autoreferencia de un objeto Framethis.setLayout(new FlowLayout());this.add(new Button("Boton 1"));this.add(new Button("Boton 2"));this.add(new Button("Boton 3"));this.add(new Button("Nombre Largo Boton 4"));this.add(new Button("5"));
19
Administradores de diseño: BorderLayout
Se colocan los elementos siguiendo una distribución en zonas: arriba, abajo, izquierda, derecha y centro.Los elementos de los extremos ocupan el espacio que les sea necesario. El central ocupa todo el que quede disponible.
// Asignacion del administrador de diseño//this es la autoreferencia de un objeto Framethis.setLayout(new BorderLayout());
// Añadir componentes al panelButton button = new Button("Boton 1 (PAGE_START)");this.add(button, BorderLayout.PAGE_START);
button = new Button("Boton 2 (CENTER)");this.add(button, BorderLayout.CENTER);button = new Button("Boton 3 (LINE_START)");this.add(button, BorderLayout.LINE_START);button = new Button("Boton 4 (PAGE_END)");this.add(button, BorderLayout.PAGE_END);button = new Button("Boton 5 (LINE_END)");this.add(button, BorderLayout.LINE_END);
20
Administradores de diseño: GridLayout
Se organizan los elementos por cuadriculas. Todos los elementos tienen el mismo tamaño. El constructor se usa para determinar el número de cuadrículas.Se puede indicar huecos entre las CuadriculasConstructores
GridLayout(int filas, int colums)
GridLayout(int filas, int colums, int xhueco, int yhueco)
// Asignación del administrador de diseño//this es la autoreferencia de un objeto Framethis.setLayout(new GridLayout(3,2,2,2));// Añadir componente al panelButton button;for (int i=1;i<=6;i++){button= new Button("Boton " + i);this.add(button);
}
21
Administradores de diseño: GridBagLayout
Se organizan los elementos por cuadrículas. Los elementos pueden ocupar más de una fila o columna. Usa la clase GridBagConstraints. Se usa para identificar los parámetros de posicionamiento de un componente.
22
Administradores de diseño: CardLayout
Solo se ve uno de sus componentes en cada momento.
Sirve como base para tener varias ventanas una debajo de otra.
Se puede asignar a cualquier contenedor
Son especialmente útiles con contenedores del tipo JTabbedPane
Capa 1Capa 2
Capa 3
23
Administradores de diseño: Nulo
Se permite trabajar sin administradores de diseñoSe indica la posición absoluta de cada componente en el contenedor con el método setBounds.
setBounds(int x,int y,int anchura,int altura)
// Asignacion del administrador de diseño nulo
//this es la autoreferencia de un objeto Framethis.setLayout(null);Button boton1 = new Button("Boton 1");boton1.setBounds(30,30,200,100);this.add(boton1);
Button boton2 = new Button("Boton 2");boton2.setBounds(200,100,100,100);this.add(boton2);
24
Ventanas
Para el trabajo con ventanas tenemos:Window: ventana de alto nivel sin bordes ni barra de menús.Frame: subclase de WindowDialog: subclase de Window
Frame: subclase de Window.tiene una barra de título, esquinas para cambiar de tamaño y una barra de menú. Puede ser la ventana principal o secundaria.setVisible(boolean)para mostrar y esconder el Frame.setMenuBar cambia la barra de menú.setTitle cambia el título de la ventana.
Dialogventana de dialogo asociada a una ventana de nivel superior
25
Manejo de Eventos:IntroducciónI
El usuario se comunica con los programas de ventana ejecutando acciones sobre los componentes gráficos.
Estas acciones tienen como resultado la generación de eventos.
Los programas de ventanas son “conducidos por eventos”.
El JDK 1.0.2 admitía un enfoque “modelo heredado”.Se devuelve true o false si el componente gestiona el tipo de evento. Si no se gestiona se envía al contenedor del objeto, asísucesivamente.
El JDK 1.1 introduce el enfoque “delegación de eventos”.Entrega los eventos a objetos específicos. Menos complejo y más eficaz.
26
Manejo de Eventos: IntroducciónII
La clase java.util.EventObject es la clase de nivel superior de la jerarquía de eventos.Esta clase ofrece:
Una variable source, origen del evento.Un método getSource() recupera el objeto fuente del evento.Un solo constructor que toma como argumento el objeto origen del evento.
La clase java.awt.AWTEvent hereda de la clase java.util.EventObject para admitir los eventos de AWT.
Componente ListenerRegistra auditor
Envía evento
Procesar eventoRecoger evento
addXXXListener()
27
Manejo de Eventos: Introducción III
Asociación/registro de auditores/oyentes/listenerCada componente puede tener asociado varios tipos de auditores a través de una interface. Ej: A un botón se le puede asociar un oyente que implemente la interface java.awt.event.ActionListener
...b = new Button("Boton");b.addActionListener(new Oyente()); // Registrar auditor... class Oyente implements ActionListener{
public void actionPerformed(ActionEvent e){...
}}
Procesar evento
Componente ListenerRegistra auditor
Envía evento
Recoger evento
addActionListener()
28
class Ventana extends Frame{private Button b;
public Ventana(){super ("Ejemplo de Ventana");inicializacionComponentes();setSize(300,200);setVisible(true);
}private void inicializacionComponentes(){
setLayout(new FlowLayout());b = new Button("Boton");b.addActionListener(new Oyente());add(b);
}public static void main(String arg[]){Ventana f = new Ventana();}private class Oyente implements
ActionListener{public void actionPerformed(ActionEvent e){Button baux=(Button) e.getSource(); baux.setBackground(Color.RED);
}}
}
Manejo de Eventos: Introducción IV
Ejemplo: Se tiene un botón con un oyente asociado El oyente audita al componente y realiza operaciones en función de los eventos recibidos por el botón.En el ejemplo el oyente cambia el color del botón cuando éste es pulsado.
29
Manejo de Eventos: Introducción V
Ejercicio: Realizar una Ventana con un ButtonEl oyente que audita al botón cambiará alternativamente los colores de un objeto cuando éste es pulsado (azul –rojo)
30
Manejo de Eventos: Consideraciones de diseño I
Implementación de oyentesImplementación de interface
• Ventaja tiene acceso a la parte privada de la clase
class Ventana extends Frame implements ActionListener{private Button b;... b.addActionListener(this);... //Método de la interface ActionListenerpublic void actionPerformed(ActionEvent e){Button baux=(Button) e.getSource(); baux.setBackground(Color.RED);
}
}//Fin class Ventana
31
Manejo de Eventos: Consideraciones de diseño II
Implementación de oyentesClases internas (inner)
• Ventajas tiene acceso a la parte privada de la clase que la contiene (outer) y mantiene un encapsulamiento del oyente dentro de la clase
class Ventana extends Frame{private Button b;... b.addActionListener(new Oyente());...//Clase interna tiene acceso a la parte privada de Ventanaprivate class Oyente implements ActionListener{public void actionPerformed(ActionEvent e){Button baux=(Button) e.getSource(); baux.setBackground(Color.RED);
}}//Fin class Oyente
}//Fin class Ventana
32
Manejo de Eventos: Consideraciones de diseño III
Implementación de oyentesClases externas
• El oyente se asocia igual que con clases internas• La clase Auditor (class Oyente) no puede acceder a la zona
privada de la clase que le contiene (class Ventana)
Clases anónimas
class Ventana extends Frame{private Button b;... b.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Button baux=(Button) e.getSource(); baux.setBackground(Color.RED);
});//Fin class anónima}//Fin class Ventana
33
Manejo de Eventos: Consideraciones de diseño IV
Asociación de oyentesPosibilidades de asociación
• “n” oyentes a “1” componente
• “1” oyente a “n” componentes
• “1” oyente a “1” componente
Oyente
Componente 1
Componente 2
Componente n
ComponenteOyente
Oye nte 1
Oye nte 2
Oye nte 3
Componente
34
Manejo de Eventos: Consideraciones de diseño V
Asociación de oyentes
private class Oyente1 implements ActionListener{public void actionPerformed(ActionEvent e){
Button baux=(Button) e.getSource(); baux.setBackground(Color.RED);
}}//Oyente1private class Oyente2 implements ActionListener{public void actionPerformed(ActionEvent e){
t1.setText("Boton pulsado"); }
}//Oyente2
b1 = new Button("Boton dos listener");b2 = new Button("Boton un listener");t1 = new TextField(10);//Asociación n a 1 b1.addActionListener(new Oyente1()); b1.addActionListener(new Oyente2());//Asociación 1 a nb2.addActionListener(new Oyente1());
35
Tipos y auditores de evento I
Tipos de eventos (heredan de java.awt.AWTEvent)
Cambios en los textosTextEvent
Cambios en el estado de un componente como la selección de un elemento de la lista.
ItemEvent
Cambios en el texto que se introducen a través de un método de entrada.
InputMethodEvent
Cambios en la posición, foco o tamaño de un componente de ventana, o una entrada de teclado u otra acción del ratón.
ComponentEvent
Acciones de desplazamiento.AdjustmenEvent
Pulsación de botones o la selección de elementos de menú.
ActionEvent
DescripciónEventos
36
Tipos y auditores de evento II
Tipos de eventos (heredan de java.awt.AWTEvent)
eventos asociados a la suma y eliminación de los componentes de un contenedor.
ContainertEvent
Se clasifican en KeyEvent y MouseEvent para cubrir los eventos que generan las acciones del teclado y los eventos de bajo nivel del ratón.
InputEvent
la generan eventos como la apertura, cierre y minimización de una ventana.
WindowEvent
Se genera el dibujo/redibujo de una ventana.PaintEvent
Cambios en el estado de un foco de entrada de un componente.
FocusEvent
DescripciónEventos
37
Tipos y auditores de evento III
Las clases AWTEvent y sus subclases dirigen los eventos hacía los objetos registrados como oyentes.Los oyentes (auditores) implementan la interfaz java.util.EventListener (no define constantes ni métodos).Tipos de auditores (heredan java.awt.event.EventListener )
InputMethodEventInputMethodListener
FocusEventFocusListener
ContainerEventContainerListener
ComponentEventComponentListener
AdjustmenEventAdjustmentListener
ActionEventActionListener
Eventos asociadosAuditores
38
Tipos y auditores de evento IV
WindowEventWindowListener
TextEventTextListener
MouseEventMouseMotionListener
MouseEventMouseListener
KeyEventKeyListener
ItemEventItemListener
Eventos asociadosAuditores
Tipos de auditores (heredan java.awt.event.EventListener )
39
Tipos y auditores de evento V
Clases adaptadorasPor comodidad se ofrecen clases adaptadoras que implementan las interfaces de audición de eventos.Se pueden utilizar para pasar por alto métodos específicos de manejo de eventos.
MouseMotionAdapterMouseMotionListener
WindowAdapterWindowListener
MouseAdapterMouseListener
KeyAdapterKeyListener
FocusAdapterFocusListener
ContainerAdapterContainerListener
ComponentAdapterComponentListener
Clases adaptadoras que implementan el auditor
Auditores
40
Tipos y auditores de evento VI
Relación componentes awt/swing y auditoresLos componentes awt/swing descienden de awt.Component
Se puede asignar los siguientes Listener• component listener• focus listener• key listener• mouse listener• mouse-motion listener• mouse-wheel listener (introducido en 1.4)
Dependiendo del tipo de componente podrá tener además otros listener asociados
41
Tipos y auditores de evento VII
Relación componentes awt y auditores
X Xtext area
X XX text field
X X X radio button
X Frame
XX X check box
X X Xbutton
win
do
w
item
do
cum
en
t,un
do
ab
leed
it
chan
ge
care
t
actio
nComponentes
42
Línea de Trabajo
JFC = Java Foundation ClassesAgrupa a AWT y lo amplia con nuevas APIs como
SwingJava 2D, Java 3DDrag-and-DropAccessibility
Swing es parte de JFC ... aunque con distintas características que AWT.Permiten elaborar interfaces gráficas más potentes.
http://java.sun.com/docs/books/tutorial/uiswing/components/components.html
Desventajas: complejidad de manejoproblema en el soporte por parte de los navegadores.
43
Bibliografía
[Jaworski 1999] Jaworski, J. (1999). Java 1.2 Al Descubierto.. Prentice Hall.
Capítulo 6, Construcción de GUI.
[Walrath et al., 2004] Walrath,K., Campione,M., Huml A., Zakhour S., (2004). The JFC Swing Tutorial: A Guide toConstructing GUIs, Second Edition. Addison-Wesley .
• Disponible en formato electrónico en inglés• http://java.sun.com/docs/books/
[Horstmann et al., 2003] Horstmann, G.S., Cornell, G. (2003) Java 2. Fundamentos. Volumen 1. Prentice Hall
Java2 SDK, Standard Edition Documentation