acolchado GridBagLayout
-
22-09-2019 - |
Pregunta
Estoy utilizando un GridBagLayout
que (actualmente) mostrar dos filas. Soy consciente de esta disposición es excesiva para esta tarea, pero estoy tratando de aprender cómo usarlo. El problema es que he añadido los dos paneles de las dos filas separadas y hay una enorme brecha en torno a la (imagen del mar y código de abajo) contenido:
texto alternativo http://www.imagechicken.com/uploads/1264533379009864500.png
Image background;
public Table(){
super();
ImageIcon ii = new ImageIcon(this.getClass().getResource("pokerTableV2.png"));
background = ii.getImage();
setSize(Constants.FRAME_WIDTH, Constants.TABLE_HEIGHT);
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.fill = GridBagConstraints.HORIZONTAL;
JButton button = new JButton("hello world");
JPanel panel1 = new JPanel();
panel1.setPreferredSize(new Dimension(800,100));
panel1.add(button, BorderLayout.CENTER);
panel1.setBackground(Color.yellow);
add(panel1, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
JPanel middlePanel = new JPanel();
middlePanel.setPreferredSize(new Dimension(800,350));
middlePanel.add(button, BorderLayout.CENTER);
middlePanel.setBackground(Color.blue);
add(middlePanel, constraints);
}
Solución
Por desgracia, con GridBagLayout
, si el contenido no llenan todo el recipiente que está en, que se centrará automáticamente todo su contenido dentro de su contenedor. Es por eso que está recibiendo una muy gran brecha.
Existen básicamente dos maneras de solucionar este problema:
- La forma más dura: Violín con el
GridBagConstraints
. Tenía un éxito limitado con este cuando se trata de evitar el comportamiento de centro-ing. - La forma más fácil:. Poner el interior de un
GridBagLayout
FlowLayout
, y luego establecer la alineación de laFlowLayout
a la parte superior izquierda, o lo que usted desea
He pedido, y contestado, esta pregunta a mí mismo en algún momento la semana pasada.
Así que en su caso está añadiendo su panel1
y middlePanel
directamente al JFrame (?), Con un GridBagLayout
JFrame (GridBagLayout)
- panel1
- middlePanel
Yo sugeriría esta estructura alternativa en su lugar, para deshacerse de todo el espacio extra (y la alineación centrada, así, si te gusta).
JFrame (FlowLayout)
- JPanel (GridBagLayout)
- panel1
- middlePanel
HTH
Otros consejos
Uso
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;
JavaDoc para weightx
/ weighty
dice:
Especifica cómo distribuir el espacio adicional horizontal / vertical.
JavaDoc para fill
:
Este campo se utiliza cuando el área de visualización del componente es mayor que el tamaño solicitado del componente. Se determina si se debe cambiar el tamaño del componente, y si es así, cómo.