Hay varios tipos de layout manager para utilizar en java en este post voy a poner en ejemplo la combinación de BoxLayout y el GridbagLayout.
BoxLayout: Es un layout manager que permite agrupar los componentes de forma horizontal o vertical dentro del contenedor.
Pertenece a la librería javax.swing.
GridBagLayout: Es un layout manager con el que tenemos control absoluto sobre las posiciones que ocuparán los objetos dentro del contenedor al que fue asignado.
Un JFrame es un contenedor de alto nivel que incluye varios contenedores y pertenece a la librería javax.swing, uno de estos contendores es el contentPane.
El contentPane es un contenedor intermedio de JFrame que debe ser creado explícitamente, a este se le va a añadir la mayoría de los componentes gráficos.
El contentPane usualmente es un JPanel y usa toda la ventana si el JFrame no incluye algún menús.
Primero vamos extender la clase JFrame y vamos a crear el contentPane este va a funcionar como nuestro contenedor principal.
Luego asignamos a contentPane BoxLayout ya que por defecto el layout del contentPane es BorderLayout, con Y_AXIS le indicamos que los paneles van a ser organizados verticalmente de arriba a abajo.
Lo siguiente es crear los dos JPanel, le asignamos GridBagLayout ya que por defecto el layout que tienen es FlowLayout.
Instanciamos GridBagConstraints que en cada JPanel, este va a se el que permita especificar con los atributos exactamente como se mostrará cada elemento dentro del contenedor.
Los atributos que vamos a utilizar van a ser:
- gridx y gridy: Especifican las coordenadas horizontal y vertical del componente que vamos a insertar en el grid.
- gridwidth y gridheight: Van a especificar el número de celdas que ocupará un componente dentro del grid.
- weightx y weighty :Permiten que las celdas ocupen la totalidad del contenedor a través de especificarle el porcentaje de espacio libre tanto horizontal como vertical.
- Insets: Sirve para especificar el padding de cada uno de los componentes dentro de la celda.
Después lo que hacemos es asignar los paneles a contentPane, crear el método main y instanciar nuestra clase.
Este es el código del ejemplo:
import javax.swing.*;//Importamos la librería swing
import java.awt.*;//Importamos la librería awt
public class EjemploLayouts extends JFrame {
public EjemploLayouts(){
//Le pasamos el titulo con el constructor de la Superclase
super("Ejemplo Layouts");
//Crear ContentPane
Container container = getContentPane();
//Asignar a ContentPane el layout BoxLayout
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
//Crear el primer JPanel
JPanel panelUno = new JPanel();
//Asignar al primer JPanel un borde negro con un titulo de borde
panelUno.setBorder(BorderFactory.createLineBorder(Color.black));
panelUno.setBorder(BorderFactory.createTitledBorder("Este es el Panel 1"));
//Asignar a panelUno el layout GridBagLayout
panelUno.setLayout(new GridBagLayout());
//instanciar GridBagConstraints para poder utilizar los atributos
GridBagConstraints constUno = new GridBagConstraints();
JLabel etiquetaUno = new JLabel("Esta es la etiqueta Uno");
constUno.gridx = 0; // La etiqueta empieza en la columna cero.
constUno.gridy = 0; // La etiqueta empieza en la fila cero.
constUno.gridwidth = 1; // La etiqueta ocupa una columna.
constUno.gridheight = 1; // La etiqueta ocupa una fila.
constUno.insets = new Insets(100,20,0,0);//Le asignamos padding a la etiqueta
constUno.weightx = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en x
constUno.weighty = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en y
panelUno.add (etiquetaUno, constUno);//Asigno a panelUno la etiqueta con sus atributos
constUno.insets = new Insets(0,0,0,0);//Reset el atributo Insets
constUno.weightx = 0;//Reset el atributo weightx
constUno.weighty = 0;//Reset el atributo weighty
JButton botonUno = new JButton("Este es el botón Uno");
constUno.gridx = 1; // El botón empieza en la columna uno.
constUno.gridy = 0; // El botón empieza en la fila cero.
constUno.gridwidth = 1; // El botón ocupa una columna.
constUno.gridheight = 1; // El botón ocupa una fila.
constUno.insets = new Insets(0,0,100,20);//Le asignamos padding al boton
constUno.weightx = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en x
constUno.weighty = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en y
panelUno.add (botonUno, constUno);//Asigno a panelUno el botón con sus atributos
constUno.insets = new Insets(0,0,0,0);//Reset el atributo Insets
//No reseteamos los atributos ya que no hay mas componentes para incluir en planelUno
//Crear el segundo JPanel
JPanel panelDos = new JPanel();
//Asignar al segundo JPanel un borde negro con un titulo de borde
panelDos.setBorder(BorderFactory.createLineBorder(Color.black));
panelDos.setBorder(BorderFactory.createTitledBorder("Este es el Panel 2"));
//Asignar a panelDos el layout GridBagLayout
panelDos.setLayout(new GridBagLayout());
//instanciar GridBagConstraints para poder utilizar los atributos
GridBagConstraints constDos = new GridBagConstraints();
JButton botonDos = new JButton("Este es el botón Dos");
constDos.gridx = 0; // El botón empieza en la columna uno.
constDos.gridy = 1; // El botón empieza en la fila uno.
constDos.gridwidth = 1; // El botón ocupa una columna.
constDos.gridheight = 1; // El botón ocupa una fila.
constDos.insets = new Insets(0,0,100,20);//Le asignamos padding al boton
constDos.weightx = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en x
constDos.weighty = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en y
panelDos.add (botonDos, constDos);//Asigno a panelDos el botón con sus atributos
constDos.insets = new Insets(0,0,0,0);//Reset el atributo Insets
constDos.weightx = 0;//Reset el atributo weightx
constDos.weighty = 0;//Reset el atributo weighty
JLabel etiquetaDos = new JLabel("Esta es la etiqueta Dos");
constDos.gridx = 1; // La etiqueta empieza en la columna uno.
constDos.gridy = 1; // La etiqueta empieza en la fila uno.
constDos.gridwidth = 1; // La etiqueta ocupa una columna.
constDos.gridheight = 1; // La etiqueta ocupa una fila.
constDos.insets = new Insets(100,20,0,0);//Le asignamos padding a la etiqueta
constDos.weightx = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en x
constDos.weighty = 0.5;//Le decimos que tiene que tomar el 50% del espacio libre en y
panelDos.add (etiquetaDos, constDos);//Asigno a panelDos la etiqueta con sus atributos
//No reseteamos los atributos ya que no hay mas componentes para incluir en planelDos
//Asignamos paneles a contentPane
add(panelUno);
add(panelDos);
}
public static void main(String [] args){
EjemploLayouts ejemplo = new EjemploLayouts();//Instanciamos la clase
ejemplo.setSize(400, 400);//Le pasamos valores de largo y ancho
ejemplo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Le asignamos la salida al Frame
ejemplo.setVisible(true);//Lo hacemos visible
}
}
Este ejemplo lo pude realizar gracias al estudio de estos dos(descargar, descargar) documentos que encontré en la Web espero les sea de ayuda.
1 comentario:
mmmm muy interesante cuando pueda lo pruebo!!
Publicar un comentario