按照一本书上敲的,但是运行结果却是这样,下面是代码和运行结果的图。
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
public class GridBagTest {
private Frame f=new Frame("测试窗口");
private GridBagLayout gb=new GridBagLayout();
private GridBagConstraints gbc=new GridBagConstraints();
private Button[] bs=new Button[10];
public void init()
{
for(int i=0;i
{
bs[i]=new Button("按钮"+i);
}
//所有组件都可以在横向纵向上扩大
gbc.fill=GridBagConstraints.BOTH;
gbc.weightx=1;
addButton(bs[0]);
addButton(bs[1]);
addButton(bs[2]);
//控制的GUI组件将会成为横向最后一个组件
gbc.gridwidth=GridBagConstraints.REMAINDER;
addButton(bs[3]);
//组件将会在横向上不会扩大
gbc.weightx=0;
addButton(bs[4]);
//该组件将会横跨两个网格
gbc.gridwidth=2;
addButton(bs[5]);
//该组件将横跨一个网格,在纵向上纵跨两个网格 该组件将会成为横向最后一个组件
gbc.gridwidth=1;
gbc.gridheight=2;
gbc.gridwidth=GridBagConstraints.REMAINDER;
addButton(bs[6]);
//横跨一个网格 纵跨两个网格 组件纵向扩大的权重为1
gbc.gridwidth=1;
gbc.gridheight=2;
gbc.weighty=1;
addButton(bs[7]);
//纵向上不会扩大 横向最后一个组件 纵向上横跨一个网格
gbc.weighty=0;
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbc.gridheight=1;
addButton(bs[8]);
addButton(bs[9]);
f.pack();
f.setVisible(true);
}
public void addButton(Button button)
{
gb.setConstraints(button, gbc);
f.add(button);
}
public static void main(String[] args) {
new GridBagTest().init();
}
/**
* 虽然设置了按钮4 按钮5横向上不会扩大,但这两个按钮宽度会受上一行四个按钮的影响,所以实际上他们依然会变大:
* 同理,虽然设置了按钮8,9纵向上不会扩大,但受到7的影响,所以9依然会变大(但8不会变高)
*/
}