aquí hay un SSCCE:oscilación BoxLayout problema JComboBox sin utilizar setXXXSize
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BoxLayoutTest extends JFrame {
public BoxLayoutTest(){
JPanel main = new JPanel();
main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));
main.setBackground(Color.red);
this.add(main);
JPanel northPanel = new JPanel();
JPanel middle = new JPanel();
middle.setLayout(new BoxLayout(middle, BoxLayout.X_AXIS));
middle.add(new JButton("FOO"));
middle.add(Box.createHorizontalGlue());
JPanel aPanel = new JPanel();
aPanel.setBackground(Color.black);
JComboBox b = new JComboBox();
//b.setPreferredSize(new Dimension(100,16)); //uncomment this to see the layout I would like to achieve
//b.setMaximumSize(new Dimension(100,16));
//middle.add(b); //uncomment this line
middle.setBackground(Color.green);
northPanel.setBackground(Color.blue);
main.add(northPanel);
main.add(middle);
main.add(Box.createVerticalGlue());
this.setSize(800,600);
this.setResizable(true);
this.setVisible(true);
}
public static void main(String[] args) {
new BoxLayoutTest();
}
}
Estoy tratando de refactorizar algunas clases que escribí hace algún tiempo, cuando yo no sabía que el uso de métodos setXXXSize en los componentes es incorrecto . El uso de un marco de tamaño variable, el resultado que quiero conseguir es la siguiente:
- El NorthPanel debe permanecer en la cima y cambiar su tamaño de acuerdo a las modificaciones de tamaño de marco (parece que funciona bien)
- El panel verde donde pongo el JButton debería mantener la dimensión máxima del JButton y permanecer justo debajo del panel azul de arriba (esto funciona bien si solo pongo JButtons dentro de ese panel).
El problema surgiría si pongo un JComboBox dentro del panel verde (tratar de comentar la línea en el SSCCE). Supongo que JComboBox no tiene un tamaño máximo especificado, por lo que se extiende con el marco. En la versión incorrecta anterior de mi código, estaba usando métodos setxxxSize en JComboBox para limitar su dimensión (intente descomentar la línea en los métodos setXXXSize para verla).
Mi pregunta es:
- ¿Es posible lograr el mismo resultado utilizando BoxLayout sin invocar setXXXSize() métodos?
- En caso afirmativo, ¿cómo?
- ¿Hay algún otro LayoutManager que pueda usar para obtener ese efecto?
Por favor, me puso en la dirección correcta
gracias por la respuesta. Parece que es un error de Swing, ¿se solucionará? – Heisenbug
@Heisenbug - no sé, pregúntale al equipo de Swing :-) – kleopatra