Clase BoxLayout
java.lang.Object
java.awt.BoxLayout
java.awt.BoxLayout
La clase BoxLayout, único gestor perteneciente al paquete swing, ordena los componentes de un contenedor de manera de flujo horizontal
de igual manera que flowLayout pero tambien permite organizarlos de forma vetical.
La idea es ordenar los componentes como si fueran "cajas" y apilarlos tanto
de izquierda a derecha como de abajo hacia arriba, lo que me recuerda el juego de android "move the box":
Constructores:
- BoxLayout(Container target, int axis)
- Único constructor con 2 parámetros: El contenedor al que se le aplique el gestor y que forma de apilar para los componentes que vayan dentro.
- Los posibles valores son las variables de clase.
Variables:
- X_AXIS
- Especifica que los componentes deben estar dispuestos de izquierda a derecha.
- Y_AXIS
- Especifica que los componentes deben estar dispuestos de arriba a abajo.
- LINE_AXIS
- Especifica que los componentes deben estar dispuestos en la dirección de una línea de texto según lo determinado por la propiedad ComponentOrientation del contenedor de destino.
- PAGE_AXIS
- Especifica que los componentes deben estar dispuestos en la dirección de que las líneas de flujo a través de una página según lo determinado por la propiedad ComponentOrientation del contenedor de destino.
- package gestores;
- import java.awt.*;
- import javax.swing.*;
- public class Caja {
- marco.setTitle("BoxLayout");
- marco.setSize(278,218);
- marco.setLocationRelativeTo(null);
- panel.setLayout(caja);
- panel.add(btn1);panel.add(btn2);panel.add(btn3);
- marco.add(panel);
- panel2.add(btn4);panel2.add(btn5);panel2.add(btn6);
- marco.add(panel2);
- marco.setVisible(true);
- }
- }
Clase CardLayout
java.lang.Object
java.awt.CardLayout
java.awt.CardLayout
El gestor CardLayout trata a cada contenedor como una carta o tarjeta.
Sólo una carta es visible a la vez, y el contenedor actúa como una pila de tarjetas.
Sólo una carta es visible a la vez, y el contenedor actúa como una pila de tarjetas.
Es decir 2 o más contenedores ocupan el mismo espacio dentro de una GUI pero solo una es visible.
Seguramente sea más fácil de entender con las "pestañas" de nuestro navegador de internet, donde muestra varias
paginas pero no todas a la vez, sino organizadas en pestañas.
Ejemplo
Para este ejemplo, se necesita de "vigilantes de escucha"(ActionListener) para que se vea,
como al hacer un simple click cambie el contenedor. Los eventos de usuarios será nuestro siguiente tema:
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- JFrame marco;
- CardLayout carta;
- JPanel superior, inferior, panel1, panel2;
- JButton btn1, btn2, btn3;
- JTextField campo;
- JComboBox combo;
- public Cartas2(){
- //construir panel superior
- superior.add(combo);
- //construir panel 1
- panel1.add(btn1);
- panel1.add(btn2);
- panel1.add(btn3);
- //construir panel 2
- panel2.add(campo);
- //construir panel inferior que contiene a A y B
- inferior.setLayout(carta);
- /* **********************************************
- Al agregar componentes se necesitan 2 argumentos:
- -El mismo componente a agregar
- -Un nombre de referencia, necesario para el método show(Container parent,String name) de CardLayout
- ********************************************** */
- inferior.add(panel1, "panel1");
- inferior.add(panel2, "panel2");
- //Constuir ventana
- marco.setTitle("Card Layout");
- marco.setSize(290, 110);
- marco.setLocationRelativeTo(null);
- marco.add(superior);
- marco.add(inferior);
- marco.setVisible(true);
- //agregar vigilante de escucha
- combo.addActionListener(this);
- }
- new Cartas2();
- }
- if (evento.getSource()== combo){
- if (combo.getSelectedIndex()==0){
- carta.show(inferior, "panel1");
- }
- if (combo.getSelectedIndex()==1){
- carta.show(inferior, "panel2");
- }
- }
- }
- }
Como resultado, al seleccionar "panel con campo de texto" cambiara el contenedor 2 y 3/4 de lo mismo si
seleccionamos la otra opción.
Otra idea es usar los demás métodos de la clase "card".
En lugar de usar de un comboBox, 2 botones mas para ir atrás y adelante con las "cartas".
Declaramos más botones globales:
Los inicializamos y los agregamos al panel superior:
anterior = new JButton("Anterior");
superior.add(anterior);
siguiente = new JButton("Siguiente");
superior.add(siguiente);
Le agregamos los vigiladores:
anterior.addActionListener(this);
siguiente.addActionListener(this);
En el método "actionPerformed" le implementamos los métodos next y previous:
public void actionPerformed (ActionEvent evento){
if (evento.getSource()== anterior){
carta.previous(inferior);
}
if (evento.getSource()== siguiente){
carta.next(inferior);
}
}
No hay comentarios:
Publicar un comentario