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);
}
и что он производит:
спасибо за помощь в решении этой проблемы
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); }