Не удается добавить 3 JPanels на главную панель - PullRequest
1 голос
/ 02 августа 2011

У меня есть 3 JPanels, и я хочу разместить их все в одной JPanel.Я использовал GridBagLayout для основной панели.Но только одна панель добавляется.Почему это может быть?

    gblayout=new GridBagLayout();
    gbc=new GridBagConstraints();
    panel1Customizer();
    panel2customizer();
    panel3Customizer();
    setLayout(gblayout);
    gbc.fill=GridBagConstraints.HORIZONTAL;
    gbc.anchor=GridBagConstraints.NORTHWEST;
    gbc.weightx=1;
    gbc.weighty=1;
    gbc.gridheight=GridBagConstraints.REMAINDER;
    add(panel1, gbc);
    add(panel2, gbc);
    gbc.gridwidth=GridBagConstraints.REMAINDER;
    add(panel3, gbc);

Методы настройки - это те, которые добавляют элементы в эти панели.

Ответы [ 4 ]

1 голос
/ 02 августа 2011

Вместо этого вы можете использовать MigLayout, код намного проще:

panel1Customizer();
panel2customizer();
panel3Customizer();
setLayout(new MigLayout("fill, wrap 3"));

add(panel1, "grow");
add(panel2, "grow");
add(panel3, "grow");
1 голос
/ 02 августа 2011

Вы должны изменить gbc.gridx и / или gbc.gridy, чтобы они были разными для каждой панели

1 голос
/ 02 августа 2011

Вы должны прочитать Как использовать GridBagLayout , примеры для этого здесь и GridBagConstraints , изменить gbc.fill=GridBagConstraints.HORIZONTAL;, если у вас есть проблемыс JComponent's Size затем добавьте setPreferedSize();например

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.*;

public class GBLFillBoth extends JFrame {
    private static final long serialVersionUID = 1L;

  public GBLFillBoth() {
    JPanel panel = new JPanel();
    GridBagLayout gbag = new GridBagLayout();
    panel.setLayout(gbag);
    GridBagConstraints c = new GridBagConstraints();
    JButton btn1 = new JButton("One");
    c.fill = GridBagConstraints.BOTH;
    //c.fill = GridBagConstraints.HORIZONTAL;
    c.anchor=GridBagConstraints.NORTHWEST;
    c.gridx = 0;
    c.gridy = 0;
    c.weightx = 0.5;
    c.weighty = 0.5;
    panel.add(btn1, c);
    JButton btn2 = new JButton("Two");
    c.gridx++;
    panel.add(btn2, c);
    //c.fill = GridBagConstraints.BOTH;
    JButton btn3 = new JButton("Three");
    c.gridx = 0;
    c.gridy++;
    c.gridwidth = 2;
    panel.add(btn3, c);
    add(panel);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
  }

  public static void main(String[] args) {
        GBLFillBoth gBLFillBoth = new GBLFillBoth();
  }
}
1 голос
/ 02 августа 2011

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

Или, может быть, просто используйте другой макет для своего JFrame, возможно BorderLayout или GridLayout, чтобы правильно расположить свои панели

...