Métodos para Añadir Componentes UI
El código de dibujo del applet Simple (implementado en su método
paint) no es bueno. No soporta scroll. Una vez que el texto alcanza
el final del rectángulo de pantalla, no podemos ver ningún nuevo texto. Aquí tenemos un ejemplo del problema.
La cura más sencilla para este problema es usar un componconte prefabricado de interface de usuario que tenga
el comportamiento correcto.
Componentes UI Pre-Fabricados
El AWT suministra los siguientes componentes UI (las clases que implementan cada componente se listán entre paréntesis):
- Botones (java.awt.Button)
- Checkboxes (java.awt.Checkbox)
- Campos de texto de una-línea (java.awt.TextField)
- Grandes campos de texto y área de edición (java.awt.TextArea)
- Etiquetas (java.awt.Label)
- Listas (java.awt.List)
- Listas desplegables de opciones (java.awt.Choice)
- Deslizadores y Barras de Desplazamiento (java.awt.Scrollbar)
- Áreas de Dibujo (java.awt.Canvas)
- Menús (java.awt.Menu, java.awt.MenuItem,
java.awt.CheckboxMenuItem)
- Contenedores (java.awt.Panel, java.awt.Window
y sus subclases)
Métodos para Usar Componentes UI en Applets
Como la clase Applet desciende de la clase Container del AWT, es fácil añadir componentes a los applets y usar controladores de distribución para controlar la posición de los
componentes en la pantalla. Aquí tenemos algunos métodos de Container que un applet
puede usar:
- add
- Añade el Component especificado.
- remove
- Elimina el Component especificaco.
- setLayout
- Selecciona el controlador de distribución.
Añadir un Campo de Texto no Editable al Applet Simple
Para hacer que el applet Simple use un campo de texto no editable y scrollable, podemos usar la clase TextField. Aquí está el código fuente revisado. Los cambios se muestran abajo:
//Importing java.awt.Graphics is no longer necessary
//since this applet no longer implements the paint method.
. . .
import java.awt.TextField;
public class ScrollingSimple extends Applet {
//Instead of using a StringBuffer, use a TextField:
TextField field;
public void init() {
//Create the text field and make it uneditable.
field = new TextField();
field.setEditable(false);
//Set the layout manager so that the text field will be
//as wide as possible.
setLayout(new java.awt.GridLayout(1,0));
//Add the text field to the applet.
add(field);
validate();
addItem("initializing... ");
}
. . .
void addItem(String newWord) {
//This used to append the string to the StringBuffer;
//now it appends it to the TextField.
String t = field.getText();
System.out.println(newWord);
field.setText(t + newWord);
repaint();
}
//The paint method is no longer necessary,
//since the TextField repaints itself automatically.
El métodoinit crea un campo de texto no editable
(un ejemplar de TextField). Seleccionar el
control de distribución del applet a uno hace el campo de texto tan ancho
como sea posible y luego añade el campo de texto al applet.
Después de esto, el método init llama al método
validate (que
Applet hereda de
Component). Llamar a
validate después de haber añadido uno o más
componentes a un applet es un poco de vudu que nos asegura que los
Component se dibujarán a si mismos en la
pantalla.
Abajo tenemos el applet resultante:
Pulsa sobre la imagen para ejecutar el applet...