GridBagLayout:如何填充所有空格

时间:2013-07-20 20:05:38

标签: java swing gridbaglayout

我有一个JFrame包含一些使用gridBagLayout(3行,一列)的JPanel。那是我的代码:

Container main_container = getContentPane();
GridBagLayout layout = new GridBagLayout();
main_container.setLayout(layout);
GridBagConstraints c = new GridBagConstraints();

StatoMagazzini jpanel_stato_magazzini = new StatoMagazzini();
c.gridx = 1;
c.gridy = 2;
c.fill = GridBagConstraints.BOTH;
layout.setConstraints(jpanel_stato_magazzini, c);

AcquistoLotto jpanel_acquisto = new AcquistoLotto(i, jpanel_stato_magazzini);
c.gridx = 1;
c.gridy=1;
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.FIRST_LINE_START;
layout.setConstraints(jpanel_acquisto, c);

ButtonPanel jpanel_button_panel = new ButtonPanel(i);
c.gridx=1;
c.gridy=3;
c.anchor = GridBagConstraints.CENTER;
layout.setConstraints(jpanel_button_panel, c);

main_container.add(jpanel_acquisto);
main_container.add(jpanel_stato_magazzini);
main_container.add(jpanel_button_panel);
pack();

这就是结果(一个丑陋的结果):https://docs.google.com/file/d/0Bxi2arJ2Dv9xbEo0Smd5QUN4UGc/edit?usp=sharing

我将消除顶部的空白空间并扩展第二个组件(即可滚动的JTable)。我该如何修改代码?

2 个答案:

答案 0 :(得分:34)

当GridBagLayout具有超出其需要的空间时,它会使用每个单元格的weightxweighty属性分配该额外空间。如果没有单元格具有非零权重属性,则额外空间不会分配给任何单元格,而是所有单元格都居中,并根据其首选宽度/高度进行调整。

如果对包含JTable的组件使用的约束执行c.weighty = 1,则将为该组件分配所有额外的垂直空间。您可能还想c.weightx = 1,因此表格将填满所有水平空间。

答案 1 :(得分:1)

您可以将容器的布局设置为BorderLayout(或等效的东西)并使用GridBagLayout创建一个额外的JPanel并将其添加到容器中

因为Borderlayout,JPanel将占用尽可能多的空间