Subido por Jose

Combinación de layouts

Anuncio
Combinación de layouts
Los layouts que analizamos hasta aquí son en sí mismos muy limitados y no
tienen la flexibilidad suficiente que nos permita pensar en diseñar una interfaz
gráfica que pueda resultar verdaderamente funcional. Sin embargo, si pensamos
que una GUI puede construirse en base a combinaciones de estos layouts
entonces la cosa puede ser diferente.
Comenzaremos por un caso simple: una calculadora.
Esta interfaz gráfica se logra utilizando un BorderLayout que en el norte tiene
una instancia de TextField (el display) y en el centro tiene un Panel (otro
container) con un GridLayout de 4 flas por 4 columnas con un Button en cada
celda.
package unidad_1;
import java.awt.*;
public class Calculadora extends Frame {
private Button b0, b1, b2, b3, b4, b5, b6, b7, b8, b9;
private Button bDec, bMas, bMenos, bPor, bDiv, bIgual, bBorrar;
private TextField tfDisplay;
public Calculadora() {
super();
setLayout(new BorderLayout());
// en el NORTE ubico el display
tfDisplay = new TextField();
add(tfDisplay, BorderLayout.NORTH);
// en el CENTRO ubico el teclado
Panel pTeclado = _crearTeclado();
add(pTeclado, BorderLayout.CENTER);
// este metodo dimensiona y setea el tamanio exacto
// necesario para contener todos los componentes del Frame
pack();
setVisible(true);
}
private Panel _crearTeclado() {
// instancio los 16 botones
b0 = new Button("0");
b1 = new Button("1");
b2 = new Button("2");
b3 = new Button("3");
b4 = new Button("4");
b5 = new Button("5");
b6 = new Button("6");
b7 = new Button("7");
b8 = new Button("8");
b9 = new Button("9");
bDec = new Button(".");
bMas = new Button("+");
bMenos = new Button("-");
bPor = new Button("*");
bDiv = new Button("/");
bIgual = new Button("=");
// instancio un Panel (un container) con GridLayout de 4 x 4
Panel p = new Panel(new GridLayout(4, 4));
// Agrego los botones al panel
// fila 0 (la mas de mas arriba)
p.add(b7);
p.add(b8);
p.add(b9);
p.add(bDiv);
// fila 1 (la segunda comenzando desde arriba)
p.add(b4);
p.add(b5);
p.add(b6);
p.add(bPor);
// fila 2 (la tercera comenzando desde arriba)
p.add(b1);
p.add(b2);
p.add(b3);
p.add(bMenos);
// fila 3 (la cuarta comenzando desde arriba)
p.add(bDec);
p.add(b0);
p.add(bIgual);
p.add(bMas);
// retorno el Panel con todos los botones agregados
return p;
}
public static void main(String[] args) {
Calculadora c = new Calculadora();
}
}
Pasemos ahora a un ejemplo con mayor complejidad: una ventana de chat.
Volviendo a la GUI de la ventana de chat, podemos verla dividida de la
siguiente manera:
package unidad_1;
import java.awt.*;
public class chat extends Frame {
private TextField tfNick;
private TextField tfMensaje;
private Button bLogin;
private Button bLogout;
private Button bEnviar;
private List lstLog;
public chat() {
super("Chat");
setLayout(new BorderLayout());
// panel norte
Panel pNorth = _crearPNorte();
add(pNorth, BorderLayout.NORTH);
// panel central
Panel pCenter = _crearPCenter();
add(pCenter, BorderLayout.CENTER);
// panel sur
Panel pSouth = _crearPSur();
add(pSouth, BorderLayout.SOUTH);
setSize(400, 300);
setVisible(true);
}
private Panel _crearPNorte() {
Panel p = new Panel(new FlowLayout(FlowLayout.LEFT));
p.add(new Label("Nick:"));
tfNick = new TextField(10);
p.add(tfNick);
bLogin = new Button("Login");
p.add(bLogin);
bLogout = new Button("Logout");
p.add(bLogout);
return p;
}
private Panel _crearPCenter() {
Panel p = new Panel(new BorderLayout());
// norte
p.add(new Label("Conversacion:"), BorderLayout.NORTH);
// centro
lstLog = new List();
p.add(lstLog, BorderLayout.CENTER);
return p;
}
private Panel _crearPSur() {
Panel p = new Panel(new BorderLayout());
// oeste
p.add(new Label("Mensaje:"), BorderLayout.WEST);
// centro
tfMensaje = new TextField();
p.add(tfMensaje, BorderLayout.CENTER);
// este
bEnviar = new Button("Enviar");
p.add(bEnviar, BorderLayout.EAST);
return p;
}
public static void main(String[] args) {
chat c = new chat();
}
}
Descargar