Я просто пытаюсь использовать GridBagLayout после this.Swing: GridBagLayout добавление компонентов не является ожидаемым способом
Я не могу получить то, что хочу.
Я хотел бы каждую Группу занять много места, как это возможно, но это не так, я действительно пытался все, следуя инструкции в Oracle Docs
Но результат всегда один и тот же:
Я действительно не понимаю, почему макет не работает.
Я попытался изменить компоновку JFrame, установив панель как ContentPane(), попытался добавить ограничения, найденные на обоих сайтах, ничего не работает.
Ваша помощь будет оценена по достоинству.
Полный код
public class Monitor extends JFrame{
// Menu
private JMenuBar bar = new JMenuBar();
private JMenu file = new JMenu("File");
private JMenuItem open = new JMenuItem("Open");
private JMenuItem exit = new JMenuItem("Exit");
private JPanel mainPanel = new JPanel();
private JPanel secondaryPanel;
private JPanel explorerPanel, tagPanel;
public Monitor(){
setTitle("");
setSize(750,600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
initComps();
}
public void initComps(){
explorerPanel = new JPanel();
explorerPanel.setBackground(Color.BLACK);
explorerPanel.setPreferredSize(new Dimension(250,300));
tagPanel = new JPanel();
tagPanel.setBackground(Color.yellow);
tagPanel.setPreferredSize(new Dimension(250, 300));
secondaryPanel = new JPanel();
secondaryPanel.setBackground(Color.blue);
secondaryPanel.setPreferredSize(new Dimension(500, 600));
mainPanel = new JPanel();
mainPanel.setPreferredSize(new Dimension(750, 600));
mainPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0 ; gbc.gridy = 0 ; gbc.gridwidth = 1 ; gbc.gridheight = 1;
mainPanel.add(explorerPanel, gbc);
gbc.gridx = 1 ; gbc.gridy = 0 ; gbc.gridwidth = 2 ; gbc.gridheight = 2;
mainPanel.add(secondaryPanel, gbc);
gbc.gridx = 0 ; gbc.gridy = 1 ; gbc.gridwidth = 1 ; gbc.gridheight = 1;
mainPanel.add(tagPanel, gbc);
this.setContentPane(mainPanel);
// Menu Bar
file.add(open);
exit.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
exit.setMnemonic('q');
file.add(exit);
bar.add(file);
setJMenuBar(bar);
}
public static void main(String[] args) {
new Monitor().setVisible(true);
}
}
EDIT:
При добавлении
gbc.weightx = 1;
gbc.weighty = 1;
Результат
См: http://madbean.com/anim/totallygridbag/, а также http://www.miglayout.com/ избежать сходит с ума. –
@Yar Спасибо за совет. Считаете ли вы, что это возможно с помощью GBL? –
Да, возможно, это возможно. Но MigLayout заставляет всех радоваться вечно и всегда. –