Swing y JFC (Java Foundation Classes)

C�mo se menci�no en el Paso 7: Cambiar las llamadas a los m�todo add y setLayout, los programas AWT a�aden componentes directamente al objeto Applet y seleccionan directamente el controlador de distribuci�n del applet. Por otro lado, los applets Swing, a�aden componentens y seleccionan el controlador de distribuci�n sobre el panel de contenidos del JApplet. Por eso, para convertir applets, debemos hacer que el c�digo fuente cambie lo que se describi� en esa sewcci�n.

Adem�s, mientras que FlowLayout es el controlador de distribuci�n por defecto para los applets AWT, BorderLayout los es para los applets Swing. Esto tiene dos repercusiones.

  1. Si queremos usarun FlowLayout, la versi�n Swing de nuestro programa debe usar setLayout sobre el panel de contenido para especificarlo.
  2. Si espec�ficamos BorderLayout en nuestro applet AWT, podemos eliminar la sentencia setLayout de la versi�n Swing.

No debemos dibujar directamente sobre un JApplet (realmente ni sobre cualquier contenedor de alto nivel) porque ser� cubierto por el panel de contenido del applet. La soluci�n es tener un componente personalizado para hacer el dibujo y a�adirlo al panel de contenido. Puedes ver las instrucciones para convertir canvas, en ella encontrar�s trucos para elegir una clase de componente personalizado, y c�mo mover el c�digo de dibujo al m�todo apropiado.

.�Convertir Canvas (Componentes Personalizados)

Antes de convertir un componente personalizado, debemos chequear si se puede utilizar un componente estandard de Swing. Por ejemplo, si nuestro componente personalizado simplemente muestra una imagen, quiz�s alg�n texto, podr�amos usar una Etiqueta Swing. Si nuestro componente personalizado implementa un bot�n con una imagen, podemos usar un Bot�n Swing en su lugar. Si hemos implementado un �rbol o una tabla, podremos usar un Tree Swing o una tabla Swing.

Si ning�n componente Swing tiene la funcionalidad que necesitamos, recomendamos cambiar la superclase de nuestro componente personalizado de Canvas a JPanel. Luego debemos mover el c�digo de dibujo desde paint o update a un m�todo llamaod paintComponent. En la parte superior de este m�todo, deber�amos insertar super.paintComponent(g). Podremos eliminar todo el c�digo relacionado con el doble buffer, ya que Swing lo proporciona de forma autom�tica.

Otras superclases, como Component JComponent tambi�n podr�an ser factibles. Extender JComponent en lugar de Component/Container nos ofrecer� el doble buffer autom�ticamente. Extender JPanel en vez de JComponent ofrece dos cosas: dibujo autom�tico del fondo (lo que podemos desactivar usando setOpaque(false)) adem�s de la habilidad de usar bordes para dibujar los laterales de los componentes.

.�Convertir Choices

Los programas AWT rellenan un objeto Choice usando el m�todo addItem. Los programas Swing rellenan un JComboBox creando un Vector, un array, o un modelo de datos con los �tems iniciales. Aqu� hay un ejemplo.

C�digo AWT C�digo Swing
String choiceprefix = "Choice item #";

Choice choice = new Choice();
for (int i = 0; i < 10; i++) {
    choice.addItem(choiceprefix + i);
}
String choiceprefix = "Choice item #";
final int numItems = 10;
Vector vector = new Vector(numItems);
for (int i = 0; i < numItems; i++) {
    vector.addElement(choiceprefix + i);
}
JComboBox comboBox = new JComboBox(vector);

.�Convertir Listas

Se necesita poner una lista en un scroll pane, mientr�s que en el AWT se obten�a autom�ticamente. Cuando se rellena una lista, no se puede hacer de la misma forma que se hac�a en el AWT. En su lugar, necesitamos crear un vector, un array o un modelo de datos con los �tems iniciales.

.�Convertir Componentes de Texto

Cuando se convierten �reas de texto AWT, normalmente tendremos que poner el �rea de texto Swing en un scrol pane y seleccionar el tama�o preferido del scroll pane. Es un poco m�s dif�cil imaginarse la relaci�n entre los viejos argumentos de fila y columna y el tama�o preferido en pixels. Esto significa que probablemente dejemos fuera del constructor del �rea de texto los argumentos de filas y columnas. No debemos olvidarnos de cambiar las llamadas a add para a�adir al scroll pane en vez de al �rea de texto.

Si estamos usando un GridBagLayout debemos asegurarnos de que aplicamos las restricciones al scroll pane y no al �rea de texto (de otro modo obtendremos un peque�o e inutil scroll pane, que realmente parece que funciona).

Los componentes de texto Swing no tienen un m�todo addTextListener. Debemos convertir el TextEventDemo para suar oyentes de document en su lugar. Esto podr�a ser un ejemplo �til d euna conversi�n que no sea 1:1.

Si queremos a�adir texto con estilos a nuestro programa, podemos convertir a JEditorPane o a JTextPane en su lugar.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR