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:
