具有固定列数的GridBagLayout

时间:2012-07-14 10:13:12

标签: java swing grid-layout gridbaglayout

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

THX

2 个答案:

答案 0 :(得分:1)

据我所知,您可以为多个JComponent使用相同的高度和宽度。但是你需要改变它们,你想要一个合并的单元格。

以下是how to use GridBagLayout

的示例
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
    .........
}

所以你不需要一直指定高度和宽度。

答案 1 :(得分:0)

我希望这是可能的,因为它会使我的项目更容易。但是,这就是答案:

  

GridBagLayout没有提供明确定义网格中行数或列数的方法,也没有方法来定义网格中每个单元格的大小。相反,GridBagLayout按屏幕上放置的组件数计算网格中的行数和列数。如果容器有五个水平排列的组件,则网格由五列和一行组成。如果Container有五个垂直排列的组件,那么网格由一列和五行组成。

我是从http://www2.sys-con.com/itsg/virtualcd/java/archives/0304/tabbone/index.html

获得的

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