520

Capítulo 11 Componentes de la GUI: parte 1

Error común de programación 11.6

Cuando se agrega más de un componente a una región en un objeto 

BorderLayout

, sólo se mostrará el último com-

ponente agregado a esa región. No hay un error que indique este problema.

Observe que la clase 

MarcoBorderLayout

 implementa directamente a 

ActionListener

 en este ejemplo, 

por lo que el objeto 

MarcoBorderLayout

 manejará los eventos de los objetos 

JButton

. Por esta razón, en la línea 

29 se pasa la referencia 

this

 al método 

addActionListener

 de cada objeto 

JButton

. Cuando el usuario hace 

clic en un objeto 

JButton

 específi co en el esquema, se ejecuta el método 

actionPerformed

 (líneas 40 a 52). La 

instrucción 

for

 mejorada en las líneas 43 a 49 utiliza una instrucción 

if

else

 para ocultar el objeto 

JButton

específi co que generó el evento. El método 

setVisible

 (que 

JButton

 hereda de la clase 

Component

) se llama 

con un argumento 

false

 (línea 46) para ocultar el objeto 

JButton

. Si el objeto 

JButton

 actual en el arreglo no 

es el que generó el evento, se hace una llamada al método 

setVisible

 con un argumento 

true

 (línea 48) para 

asegurar que el objeto 

JButton

 se muestre en la pantalla. En la línea 51 se utiliza el método 

layoutContainer

 de 

LayoutManager

 para recalcular la distribución visual del panel de contenido. Observe en las capturas de pantalla 

de la fi gura 11.41 que ciertas regiones en el objeto 

BorderLayout

 cambian de forma a medida que se ocultan 

objetos

JButton

 y se muestran en otras regiones. Pruebe a cambiar el tamaño de la ventana de la aplicación para 

ver cómo las diversas regiones ajustan su tamaño, con base en la anchura y la altura de la ventana. Para esque-
mas más complejos, agrupe los componentes en objetos 

JPanel

, cada uno con un administrador de esquemas 

separado. Coloque los objetos 

JPanel

 en el objeto 

JFrame

, usando el esquema 

BorderLayout

 predeterminado 

o cualquier otro esquema.

11.17.3 

GridLayout

El administrador de esquemas 

GridLayout

 divide el contenedor en una cuadrícula, de manera que los com-

ponentes puedan colocarse en fi las y columnas. La clase 

GridLayout

 hereda directamente de la clase 

Object

e implementa a la interfaz 

LayoutManager

. Todo objeto 

Component

 en un objeto 

GridLayout

 tiene la misma 

anchura y altura. Los componentes se agregan a un objeto 

GridLayout

 empezando en la celda superior izquierda 

de la cuadrícula, y procediendo de izquierda a derecha hasta que la fi la esté llena. Después el proceso continúa de 
izquierda a derecha en la siguiente fi la de la cuadrícula, y así sucesivamente. La aplicación de las fi guras 11.43 y 
11.44 demuestra el administrador de esquemas 

GridLayout

, utilizando seis objetos 

JButton

.

 1 

// Fig. 11.43: MarcoGridLayout.java

 2 

// Demostración de GridLayout.

 3 

import

 java.awt.GridLayout;

 4 

import

 java.awt.Container;

 5 

import

 java.awt.event.ActionListener;

 6 

import

 java.awt.event.ActionEvent;

 7 

import

 javax.swing.JFrame;

 8 

import

 javax.swing.JButton;

 9 
 10 

public class

 MarcoGridLayout 

extends

 JFrame 

implements

 ActionListener 

 11 

{

 12  

private

 JButton botones[]; 

// arreglo de botones

 13  

private final

 String nombres[] = 

 14  

 

{

"uno"

,

"dos"

,

"tres"

,

"cuatro"

,

"cinco"

,

"seis"

};

 15  

private boolean

 alternar = 

true

;

 // alterna entre dos esquemas

 16  

private

 Container contenedor; 

// contenedor del marco

 17  

private

 GridLayout cuadricula1; 

// primer objeto GridLayout

 18  

private

 GridLayout cuadricula2; 

// segundo objeto GridLayout

 19 
 20  

// constructor sin argumentos

 21  

public

 MarcoGridLayout()

 22  

{

 23  

 

super

(

"Demostracion de GridLayout"

 );

Figura 11.43

  |

GridLayout

 que contiene seis botones. (Parte 1 de 2).

11_MAQ_CAP_11.indd520

4/19/081:26:22AM