Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con GridBagLayout

Estas en el tema de Problema con GridBagLayout en el foro de Java en Foros del Web. buenas gente, estoy tratando de hacer un frame con un titulo en la cabecera centrado, una tabla en el centro y un par de botones ...
  #1 (permalink)  
Antiguo 30/03/2016, 10:48
 
Fecha de Ingreso: marzo-2016
Mensajes: 19
Antigüedad: 8 años
Puntos: 0
Problema con GridBagLayout

buenas gente, estoy tratando de hacer un frame con un titulo en la cabecera centrado, una tabla en el centro y un par de botones abajo, este es el codigo que tengo:

import javax.swing.*;
import java.awt.*;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;


public class GridBagLayout {
static void mostrarGUI(){
JFrame ventana= new JFrame ("Creado con GridBagLayout");
String[][] filas= new String[2][2];
filas[0][0]="1";
filas[0][1]="2";
filas[1][0]="3";
filas[1][1]="4";

String[] columnas= new String[2];
columnas[0]= "Columna 1";
columnas[1]= "columna 2";

DefaultTableModel dtm= new DefaultTableModel(filas,columnas);

JTable tabla= new JTable(dtm);
JButton b1= new JButton ("Boton 1");
JButton b2= new JButton ("Boton 2");
JLabel titulo= new JLabel ("Tabla de array");

GridBagLayout gridbag= new GridBagLayout();
GridBagConstraints gbc= new GridBagConstraints();

ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);
ventana.setLayout(gridbag);

gbc.fill= GridBagConstraits.HORIZONTAL;
gbc.weightx=0.5;
gbc.gridx=0;
gbc.gridy=3;
gbc.gridwidth=3;
titulo.setHorizontalAligment(JLabel.CENTER);
ventana.add (titulo, gbc);


}
public static void main(String[] args){
mostrarGUI();
}
}

pero al tratar de compilar mi ide (BlueJ) me dice que el metodo setLayout (ventana.setLayout(gridbag);) no es usable...

Me gustaria saber que sucede y agradecería su ayuda, de antemano muchas gracias.
  #2 (permalink)  
Antiguo 30/03/2016, 11:18
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Problema con GridBagLayout

Hola:

Prueba ventana.getContentPane().setLayout()

La ventana en sí (el JFrame) no admite layout. El JFrame tiene dentro un contenedor (getContentPane()) que es al que se deben añadir los layouts y componentes que quieres.

Para añadir los componentes, lo mismo, lo correcto es ventana.getContentPane().add(componente, gridbagcontraints).

se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 30/03/2016, 11:51
 
Fecha de Ingreso: marzo-2016
Mensajes: 19
Antigüedad: 8 años
Puntos: 0
Respuesta: Problema con GridBagLayout

Lo que pasa es que para hacer esto me estoy guiando de este ejemplo:

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();
}
}

Y ahí no hay problema con el setLayout, qué parte es la que evita el fallo?
  #4 (permalink)  
Antiguo 30/03/2016, 13:23
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Problema con GridBagLayout

Hola:

Dices que no hay problema. ¿Has metido ese código en tu ide y no da problema?

La única diferencia (que no debería representar ningún problema), es que en tu código haces el setVisible antes de poner el layout, mientras que en el código de ejemplo del que te guias el setVisible esta prácticamente al final, cuando ya está todo construido (que es lo más lógico).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 30/03/2016, 15:03
 
Fecha de Ingreso: marzo-2016
Mensajes: 19
Antigüedad: 8 años
Puntos: 0
Respuesta: Problema con GridBagLayout

pasa algo extraño, en mi ide ese ejemplo no da problemas, pero al hacer el mio y tratar de compilar me da el error, luego voy al ejemplo original que ya tenia compilado y lo vuelvo a compilar y ahi si me da el error... quizas sea un bug del ide, podrias probar el codigo en un ide diferente? mi computador no aguanta netbeans ni eclipse


PD: intente con el ventana.getContentPane().setLayout(gridbag); y sigue dando el mismo error.

PD2: ya estoy desesperado, intento otros ejemplos de la web sobre gridbaglayout y no me funciona, ya probe con netbeans tambien y me sigue dando error , si alguien pudiera hacer lo que quiero (titulo tabla y botones) y pasarme el codigo para probarlo se lo agradecería.

Última edición por jolut11; 30/03/2016 a las 17:09
  #6 (permalink)  
Antiguo 31/03/2016, 00:46
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Problema con GridBagLayout

Hola:

Dime exactamente el error que da.

Más que el ide puede que sea la versión de java. En cualquier caso, prueba lo que te he dicho, ventana.getContentPane().setLayout().

El método ventana.setLayout() hace automáticamente o no ventana.getContentPane().setLayout(). dependiendo de la propiedad isRootPaneCheckingEnabled(), que devuelve true si ...

"This is initially false, but is set to true when the JFrame is constructed."

Si haces ventana.getContentPane().setLayout() puedes asegurarte que se hace bien independientemente de lo que valga esa propiedad.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 31/03/2016, 10:34
 
Fecha de Ingreso: marzo-2016
Mensajes: 19
Antigüedad: 8 años
Puntos: 0
Respuesta: Problema con GridBagLayout

Pues al final use otro ejemplo qué encontré en una wiki, creo que es tuyo, tiene tu imagen y usa el contentpane pero ahora trate de añadirle un jtable con un array para el nombre de cada columna y uno bidimensional para los datos de la tabla, el problema es que al insertar la tabla la parte de arriba (los nombres de las columnas) no me sale.
  #8 (permalink)  
Antiguo 31/03/2016, 12:54
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Problema con GridBagLayout

Hola:

Para que un JTable muestre las cabeceras de las columnas, debes meter el JTable dentro de un JScrollPane. Es el JScrollPane el que pinta esa cabecera.

Debes tener cuidado, debes meter el JTable dentro del JScrollPane con el constructor, así

new JScrollPane(elJTable);

No vale usar el método add() del JScrollPane.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.