Java GridBagLayout是否需要空单元格的占位符面板?

Java GridBagLayout是否需要空单元格的占位符面板?,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,我制作了一个简单的GridBagLayout,在单元格(0,0)、(1,0)和(0,1)中添加按钮 我很高兴看到结果UI: 我想在未连接到现有单元格的单元格中添加JButton。我希望它被一个空的空间隔开。当我尝试这样做时,新的JButton被集中在其他按钮旁边。以下是补充内容: JPanel panelMain = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.g

我制作了一个简单的
GridBagLayout
,在单元格(0,0)、(1,0)和(0,1)中添加按钮

我很高兴看到结果UI:

我想在未连接到现有单元格的单元格中添加
JButton
。我希望它被一个空的空间隔开。当我尝试这样做时,新的
JButton
被集中在其他按钮旁边。以下是补充内容:

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);

    c.gridx = 3;
    c.gridy = 0;
    panelMain.add(new JButton("3,0"),c);
输出:

JButton(“3,0”)
显示在单元格(2,0)处。我是否需要使用空的
JPanel
作为单元格中的占位符(2,0)?更重要的是,为什么会发生这种情况

我是否需要在单元格(2,0)中使用空JPanel作为占位符

可以使用“插入”栅格袋约束来提供零部件之间的空间。有关插入约束的详细信息,请阅读上的Swing教程

或者,如果您想要一个占位符,那么可以使用
Box.createHorizontalStruct(…)
轻松指定宽度

更重要的是,为什么会发生这种情况


除非单元中有组件,否则单元没有大小。每个单元格彼此独立,因此您希望单元格(2,0)的大小是多少?

除非在
gridx=2
中放置了一个组件,否则布局不知道在
2,0
处应保留的宽度。当您完成UI时,如果放置了任何组件,它应该看起来很好。例如:

在其他情况下,您可以将背景色匹配的空
JPanel
添加到容器的背景色中

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);

    c.gridx = 3;
    c.gridy = 0;
    panelMain.add(new JButton("3,0"),c);