Está en la página 1de 5

El Kit Grfico: AWT

AWT: Abstract Window Toolkit.


Un widget es un elemento grfico con el que el usuario puede
interactuar.
Ocupa una porcin rectangular en una ventana.
Existen diversos tipos: botones, reas de texto, etiquetas, etc.
El kit AWT implementa los widgets ms usuales. Para usarlos es
necesario importar las clases del paquete java.awt:
import java.awt.*;

Algunos Widgets de la AWT

Los widgets se organizan en una jerarqua cuya raz es la ventana de la


aplicacin.

Los botones, reas de texto, etiquetas, etc. son hojas en la jerarqua.


Los nodos internos se denominan contenedores:
o Frame: Una ventana.
o Panel: Una porcin rectangular de una ventana pre-existente.
o Applet: Un panel dentro de un browser Web.
o FileDialog: Una ventana para que el usuario seleccione un
archivo.
Los widgets se implementan como extensiones de la clase Component.
Jerarqua de clases de AWT

Construccin de una ventana de interaccin

Construccin del Frame:


Frame frame= new Frame("Titulo de la ventana");

Construccin de widgets bsicos de interaccin:

Botn: Button boton= new Button("nombre del boton");

Etiqueta: Label etiq= new Label("nombre", Label.CENTER);

Area de texto: TextArea area= new TextArea(5, 20);

Campo de texto: TextField texto= new TextField(15);

Botn on/off: Checkbox check= new Checkbox("nombre");

La lista de temes:
List lista = new List(3);
for (int i = 1; i <= 10; i++) {
lista.addItem("List item " + i);
}

El panel de widgets:
Panel panel= new Panel();

Organizador de contenedores: layout managers


No es conveniente asignar a los widget posiciones absolutas dentro de
la ventana.
Para organizar el contenedor se le asigna un layout
manager usando setLayout:
frame.setLayout(new BorderLayout());
panel.setLayout(new FlowLayout());

El layout manager elige la mejor posicin y tamao de cada widget de


acuerdo al espacio disponible.

BorderLayout organiza un contenedor en 5 zonas:

FlowLayout coloca los widgets de izquierda a derecha y de arriba hacia abajo:

Se colocan los widgets en los contenedores:

Los botones y el campo de texto dentro del panel:


panel.add(texto);
panel.add(boton);
panel.add(check);

La etiqueta, el rea de texto y la lista en la ventana:


frame.add("North", etiq);
frame.add("West", area);
frame.add("East", lista);

El panel se trata como si fuese un solo widget:


frame.add("South", panel);

Finalmente se despliega la ventana con:


frame.pack();
frame.show();

Los widgets de la AWT son beans

Un bean es un objeto inspeccionable por ambientes de desarrollo rpido


(un RAD, un builder).
Con un RAD, el programador puede generar rpidamente el cdigo que
construye la ventana de su aplicacin.
El programador disea la interfaz grfica arrastrando beans hacia la
ventana de diseo.
El RAD provee de una paleta de beans.
Ejemplos de RAD: JBuilder de Borland, PowerJ de PowerSoft, Java
WorkShop de Sun, Cafe de Symantec, etc.

Ops! Falt la superficie de dibujo

Cuando la paleta de beans no ofrece el widget que se necesita, entonces


se fabrica con un Canvas.
Para hacer un widget se extiende la clase Canvas.
El nuevo widget se agrega a la ventana como si fuese un widget
cualquiera.
Canvas canvas= new MiCanvas();
frame.add("Center", canvas);

Cumpliento algunos requisitos, el nuevo widget se puede agregar a la


paleta de beans de cualquier RAD.

class MiCanvas extends Canvas {


public void paint(Graphics g) {
int w = getSize().width;
int h = getSize().height;
g.drawLine(10,10, 100,100);
}

public Dimension getMinimumSize() {


return new Dimension(150,130);
}

public Dimension getPreferredSize() {


return getMinimumSize();
}
}
Los widgets deben responder a los eventos que genera el sistema
grfico debido a la interaccin con el usuario.
El sistema grfico invoca el mtodo paint de un widget cuando se
descubre alguna parte de l.
El layout manager invoca los
mtodos getMinimumSize y getPreferredSize para obtener hints
acerca del mejor tamao del widget.
La mayora de los widgets (como botones, etiquetas, texto, etc.) ya
tienen redefinidos estos mtodos en forma conveniente.
El canvas sirve para implementar nuevos widgets, cuando ninguno de
los widgets disponibles es apropiado.

Juntando los pedazos para armar la ventana

public class Gui extends Frame { // Se especializa la ventana


Button boton; // Se crean variables de instancia
List lista; // para cada widget
...
public Gui() { // El constructor para la ventana
setLayout(new BorderLayout()); // asigna el layout
boton= new Button("quit"); // crea los widgets
...
add("West", area); // Arma la ventana
...
}
public static void main(String[] args) { // El main
Frame frame= new Gui(); // Crea la ventana,
frame.pack(); // la despliega
frame.show(); // y termina
} }

Una vez armada la ventana, todo el proceso se hace atrapando los eventos
que produce el usuario al interactuar con los widgets.

Ejercicio 1: Copie Gui.java a su directorio. Compile y ejecute.

Ejercicio 2: Construya una aplicacin que cree una ventana con:

area: un rea de texto al centro.


lista: una lista a la izquierda.
texto: un campo de texto abajo.
etiq: una etiqueta "Libreta de telfonos" arriba.
boton: un botn "borrar" a la derecha.

También podría gustarte