Я пишу класс, в котором я хочу иметь возможность добавлять неизвестное количество панелей в другую JPanel в вертикальной BoxLayout.Каждая из этих панелей состоит из метки в качестве заголовка и другой панели.Я хочу, чтобы панели, которые добавляются ко всем, были расположены вверху панели (в данном случае Gui), поэтому я добавил вертикальный клей внизу.У меня все работало, как и ожидалось, пока мне не пришлось переделывать часть кода, чтобы разместить главную панель (представленную графическим интерфейсом) в области прокрутки.для простоты я смог продублировать мою проблему в следующем коде.при запуске вы заметите, что клей не занимает пустое пространство, а скорее делится между другими панелями.Я установил размер для jframe, а не использовал .pack (), чтобы проиллюстрировать это.
public class Gui extends JFrame {
public Gui() {
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
getContentPane().add(new Panel());
getContentPane().add(new Panel());
getContentPane().add(new Panel());
getContentPane().add(new Panel());
getContentPane().add(Box.createVerticalGlue());
}
public class Panel extends JPanel{
public Panel(){
this.setLayout(new BorderLayout());
this.add(new JLabel("Title"), BorderLayout.NORTH);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
this.add(panel);
panel.add(new JButton("button"));
}
}
public static void main (String[] args){
Gui g = new Gui();
g.setSize(240, 320);
g.setLocationRelativeTo(null);
g.setVisible(true);
g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}