вот SSCCE:
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();
}
}
Я пытаюсь реорганизовать некоторые классы, которые я написал некоторое время назад, когда я не знал, что использование методов setXXXSize в компонентах неправильно.Используя рамку с изменяемым размером, я хочу получить следующий результат:
- NorthPanel должен оставаться сверху и изменять свой размер в соответствии с изменениями размера рамки (кажется, работает нормально)
- Зеленая панель, в которую я положил JButton, должна сохранять максимальный размер JButton и оставаться чуть ниже синей панели выше (это прекрасно работает, если я помещаю JButton только внутри этой панели).
проблема возникает, если я помещаю JComboBox в зеленую панель (попробуйте раскомментировать строку в SSCCE).Я предполагаю, что у JComboBox не указан максимальный размер, поэтому он растягивается с рамкой.В предыдущей неправильной версии моего кода я использовал методы setxxxSize в JComboBox, чтобы ограничить его размерность (попробуйте раскомментировать строку в методах setXXXSize, чтобы увидеть его).
Мой вопрос:
- Можно ли достичь того же результата, используя BoxLayout, без вызова методов setXXXSize ()?
- Если да, то как?
- Есть ли другой LayoutManager, который можно использовать для получения этого эффекта?
Пожалуйста, поставьте меня в правильном направлении