JPanel и GridBagLayout - PullRequest
       66

JPanel и GridBagLayout

0 голосов
/ 06 мая 2018

Я хотел бы динамически размещать кнопки в 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://i.stack.imgur.com/4vBQj.png

спасибо, что помогли мне решить эту проблему

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Даже если вы не указали 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);
    }
    
0 голосов
/ 06 мая 2018

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

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

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

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

...