Не кажется интуитивно понятным, ведёт себя правильно.
panel1
назначается столько места на экране, сколько доступно, потому что это единственный компонент внутри panel2
. FlowLayout
затем размещает компоненты, начиная с верхней части доступного пространства, и помещает компоненты дальше вниз только после того, как заполнит все доступное горизонтальное пространство. Таким образом, вы получаете две кнопки в верхней части рамки.
Вы можете попробовать использовать Box
вместо:
public class test extends JFrame {
private JComponent box = Box.createHorizontalBox();
private JButton button1 = new JButton("one");
private JButton button2 = new JButton("two");
public test() {
box.add(Box.createHorizontalGlue());
box.add(button1);
box.add(button2);
box.add(Box.createHorizontalGlue());
this.add(box);
}
...
}
Горизонтальная коробка автоматически центрирует компоненты по вертикали, и два клеевых компонента занимают любое дополнительное доступное горизонтальное пространство, так что кнопки располагаются в центре коробки.