|
|
Como ya sabemos, por lo tratado anteriormente,
una ventana ubica los controles dependiendo del objeto contenedor
de controles que se le haya asignado usando el método setLayout,
pero aún así esto no presenta suficiente control,
pues hay situaciones en las que se desearía distribuir
los controles usando una mezcla de las diferentes formas de distribución
disponibles, para tratar con estas situaciones se ha definido
la siguiente clase: class Panel, esta clase representa un contenedor
genérico el cual puede tener controles y una forma de distribuirlos
en él, además de pertenecer a otro contenedor que
puede ubicar sus elementos de distinta manera.
Ejemplo:
Checkbox chk;
Frame frm;
Panel pnl=new Panel(),pnl1=new Panel();
frm=new Frame("Ventana");
frm.resize(200,200);
pnl.setLayout(new GridLayout(3,2));
Button btn=new Button("B1");
pnl.add(btn);
btn=new Button("B2");
pnl.add(btn);
btn=new Button("B3");
pnl.add(btn);
btn=new Button("B4");
pnl.add(btn);
btn=new Button("B5");
pnl.add(btn);
pnl1.setLayout(new BorderLayout());
chk=new Checkbox("Norte");
pnl1.add("North",chk);
chk=new Checkbox("Sur");
pnl1.add("South",chk);
chk=new Checkbox("East");
pnl1.add("East",chk);
chk=new Checkbox("West");
pnl1.add("West",chk);
chk=new Checkbox("Center");
pnl1.add("Center",chk);
pnl.add(pnl1);
frm.add("North",pnl);
btn=new Button("Sur");
frm.add("South",btn);
btn=new Button("East");
frm.add("East",btn);
btn=new Button("West");
frm.add("West",btn);
btn=new Button("Center");
frm.add("Center",btn);
frm.show();
Este ejemplo genera la siguiente pantalla
:
Otra aplicación de la clase Panel es
la de usar una instancia de Panel como área de salida de
gráficos, de esta manera cuando cambian las dimensiones
de la ventana y de los controles que están ubicados en
la ventana, estos no cubran los gráficos (los que uno hace
mediante las instrucciones que proporciona la clase Graphics),
asegurándose de esta manera la correcta visualización
de los gráficos en la pantalla.
Para mandar información gráfica
a una instancia de Panel sólo es necesario obtener una
instancia de la clase Graphics que represente el área del
Panel en el cual se quiere dibujar y luego realizar las operaciones
que se deseen, las coordenadas de las instrucciones gráficas
son relativas al Panel y no a la ventana.
Ejemplo :
Frame frm;
Graphics gp;
Button btn;
Panel pnl=new Panel();
frm=new Frame("Ventana");
frm.resize(200,200);
frm.add("Center",pnl);
btn=new Button("South");
frm.add("South",btn);
btn=new Button("East");
frm.add("East",btn);
btn=new Button("West");
frm.add("West",btn);
btn=new Button("North");
frm.add("North",btn);
frm.show();
gp=pnl.getGraphics();
gp.setColor(Color.red);
gp.fillRect(0,0,100,100);
gp.setColor(Color.blue);
gp.drawOval(0,0,100,100);
gp.dispose();
Hay que tener en cuenta que para que la gráfica
se vea cada vez que se cambian las dimensiones o la ventana es
parcialmente tapada por otra ventana, es necesario redibujar el
contenido del Panel cada vez que hay una llamada a los métodos
paint y update de la clase Frame.