JPanel и GridBagLayout

Я хотел бы динамически размещать кнопки в JPanel. Для этого я решил применить GridBagLayout к этой панели (та, которая будет содержать кнопки).

проблема в том, что мои кнопки появляются из центра моей панели, а я хочу, чтобы они располагались сверху вниз.

вот мой код:

void placerListeUsers(){

  jPanel49.setLayout(new GridBagLayout());
  //jPanel49 est le panel sur lequel je place mes boutons.
  //jPanel49 est placé dans une JScrollPane
  GridBagConstraints c = new GridBagConstraints();
  c.gridx = 0;
  c.fill = GridBagConstraints.HORIZONTAL;
  //c.anchor=GridBagConstraints.NORTH;

  c.weightx = 1;
  //c.weighty = 0;

  for (int i = 0; i < 5; i++) {
  c.gridwidth = GridBagConstraints.REMAINDER;
  c.gridy = i;
  jPanel49.add(new JButton("Super"), c);

}

и что он производит:

https://stackru.com/images/8cb8f793ed1e53dd4b5d71dc9a750f25002fc41e.png

спасибо за помощь в решении этой проблемы

2 ответа

проблема в том, что мои кнопки появляются из центра моей панели, а я хочу, чтобы они располагались сверху вниз.

Необходимо указать ограничения веса x/y, в противном случае компоненты собираются посередине.

Прочитайте учебник Swing о том, как использовать GridBagLayout. Раздел " Задание ограничений" даст вам больше информации.

Мне кажется, у вас просто вертикальные кнопки. Может быть GridLayout или же BoxLayout добавлен в BorderLayout.PAGE_START рамы было бы проще.

Даже если вы не предоставили MCVE в соответствии с просьбой. Я стараюсь предоставить решение для вашего макета...;)

Проблема заключается в том, что, как уже упоминалось в camickr, вы должны указать GridBagLayout, где разместить все дополнительное пространство вашей панели после расчета размера кнопок:

  • Якорь должен быть GridBagConstraints.NORTH.
  • Для последней кнопки, добавленной на вашу панель, необходимо установить значение 1

    public static void main(String[] args) {
    JFrame frame = new JFrame();
    
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    Container content = frame.getContentPane();
    GridBagLayout layout = new GridBagLayout();
    JPanel panel = new JPanel(layout);
    GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.anchor = GridBagConstraints.NORTH;
    c.weightx = 1;
    int buttonCount = 5;
    for (int i = 0; i < buttonCount; i++) {
        c.weighty = i == buttonCount - 1 ? 1 : 0;
        c.gridwidth = GridBagConstraints.REMAINDER;
        c.gridy = i;
        JButton button = new JButton("Super");
        panel.add(button, c);
    }
    content.add(new JScrollPane(panel));
    frame.pack();
    frame.setSize(400, 400);
    frame.setVisible(true);
    }
    
Другие вопросы по тегам