Я впервые использую GridBagLayout
. У меня есть JFrame
с двумя панелями внутри.
- Рама имеет ширину 1200 и высоту 800.
- Самый левый
JPanel
имеет ширину 800 и высоту 800. - Самая правая панель имеет ширину 400 и высоту 800.
При рендеринге с использованием GridBagLayout
они оба отображаются с одинаковым размером.
Это код:
public class DisplayFrame extends JFrame {
public DisplayFrame() {
//simple inheritance.
super(title);
setSize(new Dimension(1200, 800));
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
addComponents();
}
public void addComponents(){
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
add(new DisplayCanvas(), gbc);
gbc.gridx++;
add(new ControlContainer(), gbc);
}
}
public class DisplayCanvas extends JPanel{
public DisplayCanvas() {
setPreferredSize(new Dimension(800,800));
this.setBackground(Color.WHITE);
this.setVisible(true);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 800);
}
}
public class ControlContainer extends JPanel{
public ControlContainer() {
setPreferredSize(new Dimension(200,200));
setBackground(Color.GRAY);
setVisible(true);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 800);
}
}
Без сомнения, мне не хватает чего-то очень очевидного.
gbc.weightx = 1;
иgbc.weighty = 1;
переопределяют подсказки размеров, предоставляемые вашими компонентами. - person MadProgrammer   schedule 20.02.2015