Java 具有固定列数的GridBagLayout

Java 具有固定列数的GridBagLayout,java,swing,grid-layout,gridbaglayout,Java,Swing,Grid Layout,Gridbaglayout,我只想要一个GridLayout,它可以合并单元格。所以我找到了GridBagLayout。看来这个布局很灵活。我不需要这种灵活性。有没有办法告诉GridBagLayout它应该使用,例如,在整个宽度和高度上使用20列和10行??它应该看起来像一个网格布局,但是带有合并单元格 据我所知,您可以对多个JComponent使用相同的高度和宽度。但您必须更改它们,因为您需要合并单元格 这里有一个来自中国的例子 因此,您不需要一直指定高度和宽度。我希望这是可能的,因为这将使我的项目更容易。然而,答案是:

我只想要一个GridLayout,它可以合并单元格。所以我找到了GridBagLayout。看来这个布局很灵活。我不需要这种灵活性。有没有办法告诉GridBagLayout它应该使用,例如,在整个宽度和高度上使用20列和10行??它应该看起来像一个网格布局,但是带有合并单元格


据我所知,您可以对多个
JComponent
使用相同的高度和宽度。但您必须更改它们,因为您需要合并单元格

这里有一个来自中国的例子


因此,您不需要一直指定高度和宽度。

我希望这是可能的,因为这将使我的项目更容易。然而,答案是:

GridBagLayout不提供显式定义网格中的行数或列数的方法,也没有定义网格中每个单元格大小的方法。相反,GridBagLayout根据屏幕上放置的组件数量计算网格中的行数和列数。如果容器有五个组件水平排列,则网格由五列和一行组成。如果容器有五个垂直排列的组件,则栅格由一列和五行组成

我是从:

在我的项目中,我正在考虑使用x和y数字为1像素×1像素的透明面板创建GridBagLayout的顶行和左列,以手动创建类似excel的网格,并将对象放入该网格结构中,使用gridwidth和gridheight按需合并单元格。这应该让我有一个简单的方法来创建我的复杂布局,并有一切调整正确(敲木头)

protected void makebutton(String name,
                          GridBagLayout gridbag,
                          GridBagConstraints c) {
    Button button = new Button(name);
    gridbag.setConstraints(button, c);
    add(button);
}

public void init() {
    GridBagLayout gridbag = new GridBagLayout();
    GridBagConstraints c = new GridBagConstraints();
    setFont(new Font("SansSerif", Font.PLAIN, 14));
    setLayout(gridbag);
    c.fill = GridBagConstraints.BOTH;
    c.weightx = 1.0;
    makebutton("Button1", gridbag, c); 
    makebutton("Button2", gridbag, c);
    makebutton("Button3", gridbag, c);
    c.gridwidth = GridBagConstraints.REMAINDER; //end row
    makebutton("Button4", gridbag, c);

    c.weightx = 0.0;                //reset to the default
    makebutton("Button5", gridbag, c); //another row
    .........
}