No puedo encontrar la manera de cambiar el tamaño de algunos componentes en una GUI de oscilación. Algunas etiquetas personalizadas se están agregando a un FlowLayout que no se comporta como deberían al cambiar el tamaño del diálogo. El panel se está construyendo utilizando el marco de formularios jgoodies.Obtenga el tamaño preferido de la distribución de flujo multilínea
Si el uso de este, en donde se añade el FlowLayout a XY (3, Y)
FormLayout layout = new FormLayout("r:d, 5px, f:d:g", // columns
"p, p, 5px, p, 5px, p") // rows
El FlowLayout se expande y una barra de desplazamiento se muestra
Si se utiliza
FormLayout layout = new FormLayout("r:d, 5px, f:10:g", // columns
"p, p, 5px, p, 5px, p") // rows
FlowLayout utiliza el espacio disponible y los elementos en la segunda línea desaparecen
Me gustaría ampliar la altura de cada fila que contiene un FlowLayout a la altura actual del componente. Desafortunadamente, el tamaño preferido siempre corresponde a la altura para una sola fila.
¿Sería más apropiado otro diseño? El texto en negrita a la izquierda debe estar alineado a la derecha, seguido de FlowLayout.
[editar] Después de haber tratado de encontrar la manera de hacer esto durante semanas, la pregunta real puede reanudarse a esto:
se añade un conjunto de etiquetas a un JPanel. Este JPanel debe usar todo el espacio disponible horizontalmente (tamaño de diálogo menos el ancho de la etiqueta de nombre de etiqueta) y expandir según sea necesario verticalmente. Si la altura del JPanel aumenta, se mostrará una barra de desplazamiento vertical (la barra de desplazamiento horizontal nunca estará visible). El diálogo puede mostrar varios JPanels que se mostrarán uno después del otro (verticalmente).
He aquí un intento de utilizar GridBagLayout y WrapLayout:
public class GridBagLayoutTagPanel extends JPanel {
private static final long serialVersionUID = -441746014057882848L;
private final int NB_TAGS = 5;
public GridBagLayoutTagPanel() {
setLayout(new GridLayout());
JPanel pTags = new JPanel(new GridBagLayout());
pTags.setBackground(Color.ORANGE);
GridBagConstraints c = new GridBagConstraints();
c.ipadx = 5;
c.ipady = 5;
int rowIndex = 0;
for (int i = 0; i < NB_TAGS; i++) {
//add tag name
JLabel lTagName = new JLabel(String.format("Tag %s:", i));
lTagName.setFont(lTagName.getFont().deriveFont(Font.BOLD));
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = rowIndex++;
pTags.add(lTagName, c);
//add tag values
JPanel pTag = new JPanel(new BorderLayout());
pTag.add(new JLabel("+"), BorderLayout.LINE_START); //label used to add new tags
pTag.add(getWrapPanel(), BorderLayout.CENTER); //the list of tag values
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
pTags.add(pTag, c);
}
//JScrollPane sp = new JScrollPane(pTags);
//sp.setBorder(BorderFactory.createEmptyBorder());
add(pTags);
}
private static JPanel getWrapPanel() {
JPanel p = new JPanel(new WrapLayout(FlowLayout.LEFT, 5, 0));
for (int i = 0; i < 50; i++) {
p.add(new JLabel("t" + i));
}
return p;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(new GridBagLayoutTagPanel());
f.setSize(new Dimension(500, 300));
f.setVisible(true);
}
}
buena pregunta 1 – mKorbel
¿Ha intentado utilizar la clase 'FormDebugUtils' y/o el' FormDebugPanel'? Estas herramientas de depuración me ayudaron algunas veces para ver qué estaba pasando realmente – Robin
¿Por qué declaras 'FlowLayout' cuando el código indica claramente que se usa' FormLayout'? 'FormLayout! = FlowLayout'. –