【发布时间】:2016-09-21 01:56:20
【问题描述】:
我正在创建一个带有 4 个 JPanel 的 JFrame。使用 GridBagLayout,我创建了三行两列,每列两个面板。通过将蓝色面板的单元格高度从 1 更改为 2,我可以使其覆盖其下方的单元格。我想对绿色面板做同样的事情,以填充它下面的空间。这是我的代码当前生成的内容:
我尝试将绿色面板的 gridheight 更改为 2,但结果如下:
我是否错误地使用了 GridBagLayout?这样做的适当方法是什么?
这是我的代码:
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
addComponents(frame.getContentPane());
frame.setSize(800, 600);
frame.setVisible(true);
}
public static void addComponents(Container contentPane) {
contentPane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(3,3,3,3);
c.fill = GridBagConstraints.BOTH;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 2;
c.weightx = 1;
c.weighty = 0.85;
JPanel panel1 = new JPanel();
panel1.setBackground(Color.BLUE);
contentPane.add(panel1, c);
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 1.1;
c.weighty = 0.35;
JPanel panel2 = new JPanel();
panel2.setBackground(Color.YELLOW);
contentPane.add(panel2, c);
c.gridx = 1;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 0.15;
c.weighty = 0.5;
JPanel panel3 = new JPanel();
panel3.setBackground(Color.RED);
contentPane.add(panel3, c);
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 0.38;
c.weighty = 0.5;
JPanel panel4 = new JPanel();
panel4.setBackground(Color.GREEN);
contentPane.add(panel4, c);
}
}
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
谢谢安德鲁。我添加了其余的代码。
-
注意:如果第三列包含三个单元格,每个单元格的行跨度为 1,则它开始按预期运行。
标签: java swing layout-manager gridbaglayout