Usando GridBagLayout en Java…





Esta vez debido a un proyecto me ha tocado meterme lo más que puedo en JAVA y la investigación empieza a dar resultados… ahora hablaremos un poco del Layout de Java: GridBagLayout.

GridBagLayout es el más complejo Layout de Java y asu vez el más potente, bueno desde mi punto de vista como programador (Desarrollador es para los grandes genios) es algo que tienes que aprender, una vez entendido las GUI son pan Comido. Empecemos a usar este Layout…

GridBagLayout

En Primera definimos nuestra GUI quizas en papel o mentalmente, la GUI que acontinuación presento solo servirá para fines demostrativos, será bastante simple pero ayudará a que entendamos como posicionar objetos con este Layout.

Esta será la GUI que construiremos y explicaremos con el fin de entender que onda con el GridBagLayout:

1x1.trans Usando GridBagLayout en Java...

Identifiquemos las partes contenidas en la GUI anterior para tenerlas presentes.

1x1.trans Usando GridBagLayout en Java...

Como podemos ver tenemos una etiqueta a la cual le agregamos una imagen, seis botones de la libreria SWING de JAVA y por ultimo una segunda etiqueta.

Ahora debemos imaginar una cuadricula que separe cada uno de los componentes para situarlos dentro del Layout, bueno no la imagenemos para eso esta la siguiente imagen:

1x1.trans Usando GridBagLayout en Java...

Como han podido ver, el componente Label que despliega la imagen ocupa tres celdas, como tambien lo hace el segundo Label al pie de la ventana.

Bueno ya se que lo quieren es empezar a revisar el codigo bien empezaremos construyendo una pequeña función que cuando la llamemos dibuje la interfaz de nuestro programilla. más o menos tendremos la estructura siguiente:

[java]
import javax.swing.*;
import java.awt.*;

public class demoGBL {
static void ShowGUI(){

}
public static void main (String[] args) {
ShowGUI();
}
}
[/java]

Como siempre JAVA necesita que construyamos los objetos que vamos a utilizar, asi que procederemos a construir los seis botones, las dos etiquetas y el layout con sus respectivas constraints, dentro de la función ShowGUI:

[java]
import javax.swing.*;
import java.awt.*;

public class demoGBL {
static void ShowGUI(){
//Sin este JFrame no hay apliocación
JFrame principal = new JFrame (“Demo – GridBagLayout”);
JLabel logo = new JLabel (new ImageIcon(“imagenes/dhc_logo_1.png”));
JLabel team = new JLabel (“DaHouseCat – http://blog.dahousecat.net”);
JButton b1 = new JButton (“Boton”);
JButton b2 = new JButton (“Boton”);
JButton b3 = new JButton (“Boton”);
JButton b4 = new JButton (“Boton”);
JButton b5 = new JButton (“Boton”);
JButton b6 = new JButton (“Boton”);
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
/Asignamos la constante EXIT_ON_CLOSE, cierra la ventana al pulsar la X.
principal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Asignamos al JFrame el Layout que usará, GridBagLayout
principal.setLayout (gridbag);
}
public static void main (String[] args) {
ShowGUI();
}
}
[/java]

Bien, hasta el momento hemos construido todos nuestros objetos, hemos asignado la Layout al JFrame; estamos listos para agregar los componentes a nuestro Layout, vamos a iniciar asignando el primer boton b1:

[java]
gbc.weightx = 0.5;
gbc.gridx = 0;
gbc.gridy = 1;
//Se agrega el primer boton al JFrame
principal.add (b1,gbc);
[/java]

De la forma anterior agregaremos todos los botones, lo importante es aprender para que sirven los parametros que se han establecido antes de poner el botón.

gridwidth es el ancho en celdas que ocupará el componente, ya una vez que tengamos definidas las celdas de nuestro Layout, con este metodo definimos el ancho del componente.

weightx es el aspecto que debe mantener el objeto con respecto a la columna en la que se encuentra. los rangos van de 0.0 a 1.0. Son usados para mantener el ancho de la cosulta de tamaño adecuado.

weighty lo mismo que el comando anterior pero en vez de extenderse en la columna se exiende en filas.

gridx y gridy hacen referecia a la celda en la que se colocará el componente.


1x1.trans Usando GridBagLayout en Java...

Siguiendo con la imagen; la primera fila de botones gridy es igual 1, la segunda fila de botones gridy es igual a 2 y para el Laber final gridy es igual a 3

Bien después de agregar los seis botones nuestro codigo se debe ver asi:

[java]
import javax.swing.*;
import java.awt.*;
public class demoGBL {
static void ShowGUI(){
//Sin este JFrame no hay apliocación
JFrame principal = new JFrame (“Demo – GridBagLayout”);
JLabel logo = new JLabel (new ImageIcon(“imagenes/dhc_logo_1.png”));
JLabel team = new JLabel (“DaHouseCat – http://blog.dahousecat.net”);
JButton b1 = new JButton (“Boton1″);
JButton b2 = new JButton (“Boton2″);
JButton b3 = new JButton (“Boton3″);
JButton b4 = new JButton (“Boton4″);
JButton b5 = new JButton (“Boton5″);
JButton b6 = new JButton (“Boton6″);
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
//Los insets son los bordes externos de una aplicación, o sea el espacio entre cada componente, new Insets (arriba,izquierda,abajo,derecha);
gbc.insets = new Insets(3,3,3,3);
//Asignamos la constante EXIT_ON_CLOSE, cierra la ventana al pulsar la X.
principal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Asignamos al JFrame el Layout que usará, GridBagLayout
principal.setLayout (gridbag);
//Se agrega el primer boton al JFrame
gbc.weightx = 0.5;
gbc.gridx = 0;
gbc.gridy = 1;
principal.add (b1,gbc);
gbc.weightx = 0.5;
gbc.gridx = 1;
gbc.gridy = 1;
principal.add (b2,gbc);
gbc.weightx = 0.5;
gbc.gridx = 2;
gbc.gridy = 1;
principal.add (b3,gbc);
gbc.weightx = 0.5;
gbc.gridx = 0;
gbc.gridy = 2;
principal.add (b4,gbc);
gbc.weightx = 0.5;
gbc.gridx = 1;
gbc.gridy = 2;
principal.add (b5,gbc);
gbc.weightx = 0.5;
gbc.gridx = 2;
gbc.gridy = 2;
principal.add (b6,gbc);
//Ahora agregaremos el logotipo y el pie de la aplicacion.
gbc.weightx = 0.5;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 3;
//Se utilizan para acceder a costantes, esta significa que el componente debe llenar la celda a lo ancho.
gbc.fill = GridBagConstraints.HORIZONTAL;
principal.add (logo,gbc);
gbc.weightx = 0.5;
gbc.gridx = 0;
gbc.gridy = 3;
//Asignamos que la Label tenga un ancho de 3 celdas
gbc.gridwidth = 3;
//Alineación del texto dentro del componente Label
team.setHorizontalAlignment(JLabel.CENTER);
principal.add (team,gbc);
//Hace visible el panel
principal.setVisible(true);
//Ajusta la ventana a los componentes que haya
principal.pack();
}
public static void main (String[] args) {
ShowGUI();
}
}
[/java]

Sencillo ¿no?, pues ahi tienes un excelente Layout para hacer sus GUI’s en JAVA, esta aplicación corre excelente como aplicación de Windows, solo falta meterla a un JAR y listo, pero bueno seguiremos hablando de JAVA y algunas cositas, por el momento ya tenemos el inicio de una buena aplicación.

Referencias

Como Usar GridBagLayout – The Java Tutorials by SUN
Creando una GUI con JFC/Swing – The Java Tutorials by SUN



Visitantes llegan a esta pagina buscando:
  • grid bag layout en java
  • inset java
  • GridBagLayout como usar
  • gridBaglayout java swing
  • java gridbaglayout

  • GridBagLayout en java

  • gridbaglayout java

  • como funciona gridbaglayout
  • como usar gridbaglayout
  • swing gridbagLayout
6 Comentarios en Usando GridBagLayout en Java…
  1. Proz dice:

    jajajaja los layouts de java ohhh …….. bueno algo que no mucha gente sabe es que hay un layout NULO en el cual tu posicionas los elementos con coordenadas X y Y, muy util cuando son aplicaciones fullscreen, porque los elementos no se redimensionan con la ventana, pero igual, buen articulo man! ^^

  2. excelente post también en linux/DebianEtch4.x se ve muy bien, gracias por la información. Con respecto a que se re-dimensionen los swing, yo lo evito usando paneles internos, además de que se ven (a mi parecer) más bonitos, también esta la opción de deshabilitar la re-dimención. otra cosita que se ve padre; y con esto no digo que no lo sepas o que te falta algo ni nada, es asignarle una posición a la aplicación en el monitor.

    JFrame principal = new JFrame(“Demo – GridBagLayout”);

    int inset = 350;

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();

    principal.setBounds(inset, inset,
    screenSize.width – inset * 2,screenSize.height – inset * 2);

    principal.setSize(700, 400);

    //principal.setVisible(true);

    /Code …/

  3. DaHouseCat dice:

    rodrigo salado anaya excelente, buen tip

  4. Buena tu tutorial, a diferencia que otros entornos de desarrollo, java es mas explicito en las Ubicaciones de sus controles.
    ya que se maneja con FlowLayout,GridBagLayout etc, pero como dice Proz es mas facil(aparte que yo tambien uso) setLayout(null) un ejemplo:

    JLabel lbluno=new JLabel(“Uno”);
    Container c=getContentPane();

    //Uso set Bounds para dar las coordenadas y altura y anchura
    //setBounds(x,y,ancho,alto);
    lbluno.setBounds(20,100,200,20);
    c.setLayout(null);
    c.add(lbluno);

  5. JavaMan dice:

    Hola, me gusta tu tutorial lo lei no lo he aplicado por que estoy viendo otros ejemplos

    con respecto a los que pusieron que usan un layout null, creo haber leido por ahi que no es correcto dejar como null el layout principal y al correr la aplicacion se debe aprovechar la concurrencia de java, cossa que pocos hacen

    saludos

  6. Leo dice:

    Hola, muy buen artículo! en cuanto a los layouts null, se pueden usar, pero en determinadas ocasiones como explica Sun aqui

    Te invito a que saques ideas de Runit sobre gridbagloyout.