Это то, что я пытаюсь достичьJava GridBagLayout изменение размера и фиксированного размера
------------------------| 150px |
| | width |
| | p2 |
| | |
| Fill frame | |
| p1 | |
| | |
| | |
------------------------| |
150px height | |
| p3 | |
---------------------------------
«Заполнить кадр» имеет масштаб динамический, но другие два квадрата имеют фиксированную ширину/высоту.
Мой код действительно создает этот макет, но p1 не масштабируется, чтобы заполнить весь кадр. Может ли кто-нибудь рассказать мне, как сделать p1 динамическим?
Заранее спасибо.
Это то, что я до сих пор:
setTitle(Rolit.TITLE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainPanel = new JPanel();
mainPanel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
//P1 FILL P1 WITH 64 BUTTONS
p1 = new JPanel();
p1.setLayout(new GridLayout(8, 8));
p1.setMinimumSize(new Dimension(600, 600));
p1.setMaximumSize(new Dimension(600, 600));
p1.setPreferredSize(new Dimension(600, 600));
for(int y = 0; y < 8; y++){
for(int x = 0; x < 8; x++){
JButton btn = new JButton(x + " , " + y);
p1.add(btn);
}
}
//P2 FILL P2 WITH 4 BUTTONS
p2 = new JPanel();
p2.setLayout(new GridLayout(4, 1));
p2.setMinimumSize(new Dimension(150, 100));
p2.setMaximumSize(new Dimension(150, 100));
p2.setPreferredSize(new Dimension(150, 100));
for(int i = 0; i < 4; i++){
p2.add(new JButton("Button"));
}
//P3
p3 = new JPanel();
p3.setMinimumSize(new Dimension(100, 150));
p3.setMaximumSize(new Dimension(100, 150));
p3.setPreferredSize(new Dimension(100, 150));
p3.setBackground(Color.BLUE);
//ADD ALL TO mainPanel
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
mainPanel.add(p1, c);
c.gridx = 1;
c.gridheight = 2;
c.fill = GridBagConstraints.VERTICAL;
mainPanel.add(p2, c);
c.gridx = 0;
c.gridy = 1;
c.gridheight = 1;
c.gridwidth = 2;
c.fill = GridBagConstraints.HORIZONTAL;
mainPanel.add(p3, c);
setContentPane(mainPanel);
pack();
setLocationRelativeTo(null);
setVisible(true);
+1 для альтернативы – MadProgrammer
@MadProgrammer: спасибо. Я был первым, кто ответил на ваш ответ за то, что был отличным, как обычно. –
Лично я предпочитаю использовать сложные макеты над сложным «GridBagLayout», где это возможно, с чем легче справиться, если вы хотите изменить его позже - IMHO – MadProgrammer