setlayout - layout java wikipedia
BoxLayout estira el componente para adaptarse al panel principal (5)
BoxLayout es uno de los pocos administradores de diseño que respeta los tamaños mínimo y máximo de un componente. Entonces, si quieres evitar que un panel se estire, puedes usar:
panel.setMaximumSize( panel.getPreferredSize() );
Hola. Estoy usando un BoxLayout
para apilar JPanel
s uno encima del otro ( BoxLayout.Y_AXIS
), por ejemplo, si mi JPanel
principal es de 500 píxeles de altura y le agrego dos paneles secundarios de 100 píxeles de altura. El BoxLayout
estira para que juntos ocupen el espacio de 500px. ¿Alguien sabe como deshabilitar esta característica?
El truco es, como se mencionó en la respuesta anterior, usar pegamento, rellenos y áreas rígidas en el diseño de la caja. Sin embargo, a diferencia de ese respondedor, recomendaría seguir con BoxLayout: puede lograr la mayoría de las IU más sencillas con Box que con Grid Bag; y la potencia adicional no te compra mucho en tu cuadro de diálogo típico.
En el antiguo idioma, estas eran cosas como Box.createHorizontalStrut (int x) y Box.createHorizontalGlue (); la idea es que coloques un puntal entre los componentes primero y segundo y luego agregues un pegamento después del segundo. ("puntal" = "área rígida" hoy en día).
Esto parece funcionar perfectamente bien ... usando BoxLayout, como quisieras.
this.setLayout(new FlowLayout()); // this being the JFrame
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setPreferredSize(new Dimension(500, 500));
panel.setBackground(Color.orange);
this.add(panel); // add the parent to the JFrame
JPanel pnlChild1 = new JPanel();
pnlChild1.setBackground(Color.cyan);
pnlChild1.setMaximumSize(new Dimension(200, 100));
JPanel pnlChild2 = new JPanel();
pnlChild2.setBackground(Color.magenta);
pnlChild2.setMaximumSize(new Dimension(200, 100));
panel.add(pnlChild1);
panel.add(pnlChild2);
Sus paneles se están estirando porque BoxLayout no restringe cada panel a su tamaño preferido. Debe encontrar diseños que respeten el tamaño preferido de un componente, como lo hacen las posiciones NORTE y SUR de BorderLayout.
Prueba esto:
- Crea un JPanel con un BorderLayout. Agregue su componente hijo como NORTE en este JPanel.
- Cree un segundo JPanel para el otro componente secundario, agréguelo como NORTE de un BorderLayout
- Agregue los dos JPanels a su BoxLayout.
Código:
JPanel panel1 = new JPanel(new BorderLayout());
panel1.add(component1, BorderLayout.NORTH);
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add(component2, BorderLayout.NORTH);
JPanel boxPanel = new JPanel();
BoxLayout boxLayout = new BoxLayout(boxPanel, BoxLayout.Y_AXIS);
boxPanel.setLayout(boxLayout);
boxPanel.add(panel1);
boxPanel.add(panel2);
Utilice GridBagLayout en GridBagLayout lugar. Tienes mucho más control sobre tu interfaz de usuario.
Pero si desea utilizar BoxLayout todavía, y no desea que se estiren, puede verificar el uso de rellenos de componentes invisibles como áreas rígidas, pegamentos y rellenos.