麻烦耽误大家的宝贵时间 帮忙给一个新手解决一个可能在你们看来比较弱的问题
我是这么做的  但是出现问题:
用的是GridBagLayout要在一个容器上加2个Button  b1和b2分成四个格子  最后的要求是 b1占用(0,0)和(0,1)  而b2只占用(1,0)格.在没有设置两个button的weightx,weighty之前 是正确的位置 但是当我给b2设置了weighty之后 b2就一下占用了2格了(1,0)和(1,1)请问怎么做才能让b2只占用(1,0)格 而且也能随着Frame的大小 而上下左右 相应变化呢?我的代码是这样的:
import java.awt.*;public class GridBag_t1
{

public  static void main(String argv[])
{
Frame f =new Frame("Oh");

f.setLayout(new GridBagLayout());

Button b1 = new Button("b1");
Button b2 = new Button("b2");
GridBagConstraints  cons  = new GridBagConstraints();
cons.gridx=0;
cons.gridy=0;
cons.gridwidth = 1;
cons.gridheight = 2;
cons.weightx   = 0.8;
cons.weighty   = 0.8;
cons.anchor    = GridBagConstraints.CENTER;
cons.fill      = GridBagConstraints.BOTH;
cons.insets = new Insets(5,5,5,5);
f.add(b1,cons);
cons.gridx=1;
cons.gridy=0;
cons.gridheight =1;

cons.fill      = GridBagConstraints.BOTH;
cons.anchor  =   GridBagConstraints.CENTER;
cons.weightx   = 0.2;
cons.weighty   = 0.2;
cons.insets = new Insets(5,5,5,5);
f.add(b2,cons);
f.setSize(300,200);

f.setVisible(true);

}

}

解决方案 »

  1.   

    我Blog上有个GridBagLayout例子,你参考下,希望有帮助
      

  2.   

    按照你的想法,写了个例子,你参考下:import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class Test extends JFrame { private static final long serialVersionUID = -2397593626990759111L; private JPanel pane = null; private JButton b_1 = null, b_2 = null; private int gridx, gridy, gridwidth, gridheight, anchor, fill, ipadx, ipady; private double weightx, weighty; private Insets insert = null; private GridBagLayout gbl = null; private GridBagConstraints gbc = null; public Test() {
    super("Test");
    pane = new JPanel();
    b_1 = new JButton("B_1");
    b_2 = new JButton("B_2");

    gbl = new GridBagLayout();
    pane.setLayout(gbl);

    gridx = 0; // X0
    gridy = 0; // Y0
    gridwidth = 1; // 横占一个单元格
    gridheight = 2; // 列占两个单元格
    weightx = 1.0; // 当窗口放大时,长度随之放大
    weighty = 1.0; // 当窗口放大时,高度随之放大
    anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部
    fill = GridBagConstraints.BOTH; // 当有剩余空间时,填充空间
    insert = new Insets(0, 0, 0, 0); // 组件彼此的间距
    ipadx = 0; //组件内部填充空间,即给组件的最小宽度添加多大的空间
    ipady = 0; //组件内部填充空间,即给组件的最小高度添加多大的空间
    gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insert, ipadx, ipady);
    gbl.setConstraints(b_1, gbc);
    pane.add(b_1);

    gridx = 1; // X1
    gridy = 0; // Y0
    gridwidth = 1; // 横占一个单元格
    gridheight = 1; // 列占一个单元格
    weightx = 1.0; // 当窗口放大时,长度随之放大
    weighty = 1.0; // 当窗口放大时,高度随之放大
    anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部
    fill = GridBagConstraints.BOTH; // 当格子有剩余空间时,填充空间
    insert = new Insets(0, 0, 0, 0); // 组件彼此的间距
    ipadx = 0; //组件内部填充空间,即给组件的最小宽度添加多大的空间
    ipady = 0; //组件内部填充空间,即给组件的最小高度添加多大的空间
    gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insert, ipadx, ipady);
    gbl.setConstraints(b_2, gbc);
    pane.add(b_2);

    // 下面是一个临时的填充面板,否则B_2所在的格子将把本格子挤掉
    gridx = 1; // X1
    gridy = 1; // Y1
    gridwidth = 1; // 横占一个单元格
    gridheight = 1; // 列占一个单元格
    weightx = 1.0; // 当窗口放大时,长度随之放大
    weighty = 1.0; // 当窗口放大时,高度随之放大
    anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部
    fill = GridBagConstraints.BOTH; // 当格子有剩余空间时,填充空间
    insert = new Insets(0, 0, 0, 0); // 组件彼此的间距
    ipadx = 0; //组件内部填充空间,即给组件的最小宽度添加多大的空间
    ipady = 0; //组件内部填充空间,即给组件的最小高度添加多大的空间
    gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insert, ipadx, ipady);
    JPanel tempPane = new JPanel();
    gbl.setConstraints(tempPane, gbc);
    pane.add(tempPane); this.getContentPane().add(pane);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(300, 200);
    this.setVisible(true);
    } public static void main(String args[]) {
    new Test();
    }}