43
1 AWT Introducción Componentes y contenedores Elementos Básicos Administradores de diseño Ventanas Manejo de eventos Tipos y auditores de evento Línea de Trabajo Bibliografía

Vbr Awt 01

Embed Size (px)

Citation preview

Page 1: Vbr Awt 01

1

AWT

IntroducciónComponentes y contenedoresElementos BásicosAdministradores de diseñoVentanasManejo de eventosTipos y auditores de eventoLínea de TrabajoBibliografía

Page 2: Vbr Awt 01

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.*

Page 3: Vbr Awt 01

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

Page 4: Vbr Awt 01

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

Page 5: Vbr Awt 01

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);}

}

}

Page 6: Vbr Awt 01

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”);

Page 7: Vbr Awt 01

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);

Page 8: Vbr Awt 01

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);

Page 9: Vbr Awt 01

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));

Page 10: Vbr Awt 01

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");

Page 11: Vbr Awt 01

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);

Page 12: Vbr Awt 01

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);

Page 13: Vbr Awt 01

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);

Page 14: Vbr Awt 01

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).

Page 15: Vbr Awt 01

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

Page 16: Vbr Awt 01

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

Page 17: Vbr Awt 01

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);

Page 18: Vbr Awt 01

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"));

Page 19: Vbr Awt 01

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);

Page 20: Vbr Awt 01

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);

}

Page 21: Vbr Awt 01

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.

Page 22: Vbr Awt 01

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

Page 23: Vbr Awt 01

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);

Page 24: Vbr Awt 01

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

Page 25: Vbr Awt 01

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.

Page 26: Vbr Awt 01

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()

Page 27: Vbr Awt 01

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()

Page 28: Vbr Awt 01

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.

Page 29: Vbr Awt 01

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)

Page 30: Vbr Awt 01

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

Page 31: Vbr Awt 01

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

Page 32: Vbr Awt 01

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

Page 33: Vbr Awt 01

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

Page 34: Vbr Awt 01

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());

Page 35: Vbr Awt 01

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

Page 36: Vbr Awt 01

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

Page 37: Vbr Awt 01

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

Page 38: Vbr Awt 01

38

Tipos y auditores de evento IV

WindowEventWindowListener

TextEventTextListener

MouseEventMouseMotionListener

MouseEventMouseListener

KeyEventKeyListener

ItemEventItemListener

Eventos asociadosAuditores

Tipos de auditores (heredan java.awt.event.EventListener )

Page 39: Vbr Awt 01

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

Page 40: Vbr Awt 01

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

Page 41: Vbr Awt 01

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

Page 42: Vbr Awt 01

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.

Page 43: Vbr Awt 01

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