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