Tengo una UI mediana-grande que usa un BorderLayout; el centro es un panel con pestañas que contiene varios paneles con varios diseños, etc.Manteniendo los tamaños preferidos de los componentes en el centro de BorderLayout
Quiero que el panel en el centro de este diseño de borde cambie de tamaño de acuerdo con el tamaño de la ventana, pero no quiero los componentes dentro el panel para estirar. Etiquetas, cuadros combinados, campos de texto, botones: quiero que se mantengan en sus tamaños preferidos y permitan que el panel que los contiene se estire. Los puse en un panel de desplazamiento en caso de que el espacio sea demasiado pequeño para el panel.
Varios carteles con coloridos vocabularios advierten sobre el peligro de utilizar cualquiera de los métodos setXXXsize() en los componentes. Eso es lo que hago ahora, y me gustaría aprender cómo evitarlo.
GridBagLayout no es apropiado para algunos de mis paneles. Está, por naturaleza, orientado alrededor de filas y columnas, y no todo cabe en filas y columnas. Por supuesto, podría crear filas y columnas artificiales para encajar todo, pero realmente espero que Swing tenga más opciones de diseño que eso.
Vertical Glue no lo hace tampoco. He incluido en SSCE amada de HFOE:
package example;
import java.awt.BorderLayout;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class BorderAndBox extends JFrame
{
public static void main(String args[])
{
BorderAndBox bnb = new BorderAndBox();
bnb.createUI();
bnb.setVisible(true);
}
public void createUI()
{
JPanel borderPanel = new JPanel(new BorderLayout());
JLabel northLabel = new JLabel("Nawth");
borderPanel.add(northLabel, BorderLayout.NORTH);
String[] southComboChoices = { "one", "two", "three" };
JComboBox southCombo = new JComboBox(southComboChoices);
borderPanel.add(southCombo, BorderLayout.SOUTH);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
String[] firstChoices = { "first", "uno", "UN" };
String[] secondChoices = { "second", "dos", "zwei" };
String[] thirdChoices = { "third", "tres", "drei" };
JComboBox firstCombo = new JComboBox(firstChoices);
JComboBox secondCombo = new JComboBox(secondChoices);
JComboBox thirdCombo = new JComboBox(thirdChoices);
centerPanel.add(firstCombo);
centerPanel.add(secondCombo);
centerPanel.add(thirdCombo);
centerPanel.add(Box.createVerticalGlue()); // first attempt; does NOT
// take up available vertical space, instead it appears to create a space
// that is shared equally among the (now) four components of this space.
borderPanel.add(centerPanel, BorderLayout.CENTER);
getContentPane().add(borderPanel);
pack();
}
}
Si agranda la ventana, los cuadros combinados en el centro agrandar; como está escrito, una pieza de pegamento vertical debajo de ellos también se agranda, pero no ocupa todo el espacio disponible. Parece que tiene tanto espacio como cada uno de ellos.
Entonces, ¿cuál es una buena manera de abordar esto?
* "... SSCE querido:" * Me encanta también. Y es SSCCE (2 Cs). ;) –
no puede ser simplemente un pequeño ejemplo autocontenido? – arcy
* "¿no puede ser simplemente un pequeño ejemplo autocontenido?" * [Citando] (http://sscce.org/#co) una de mis personas favoritas: * "En este documento, correcto (o compilable, que particularmente se relaciona con el código fuente de la computadora) significa asegurarse de que su ejemplo cumpla con los estándares y protocolos aceptados. "* punto más notable *" Asegúrese de que su ejemplo sea correcto. O el ejemplo compila limpiamente, o causa el mensaje de error exacto acerca del cual quiero ayuda. "* El código compilado y mostró el problema, fácil de hacer. It * is * a SSCCE. :) –