先用BORLAND的那个XYLAYOUT , 再转成GIRDBAGLAYOUT(如果你不怕麻烦, 直接用GIRDBAGLAYOUT调这调那调一通便OK)
如果要与百分比相对应的话, 加几行代码取得PANEL 的WIDTH或HEIGTH便OK.

解决方案 »

  1.   

    {
        ……
        GridBagConstraints gbc = new GridBagConstraints();
        //在x方向上收缩并充满整个区域
        gbc.fill = GridBagConstraints.HORIZONTAL;
        //设置单元格边界的“外部”填充空白区域
        gbc.insets = new Insets(5,10,5,10);
        //设置单元格边界的“内部”填充空白区域
        gbc.ipadx = 3;
        gbc.ipady = 3;
        //不在x、y方向上扩张或收缩而超出他的初试大小
        gbc.weightx = 0;
        gbc.weighty = 0;
        add(lblOldPassword,gbc,0,0,1,1);
        add(lblNewPassword,gbc,0,1,1,1);
        add(lblConPassword,gbc,0,2,1,1);
        //在x方向上扩张或收缩,而在y方向上保持他的初试大小
        gbc.weightx = 100;
        gbc.weighty = 0;
        add(txtOldPassword,gbc,1,0,1,1);
        add(txtNewPassword,gbc,1,1,1,1);
        add(txtConPassword,gbc,1,2,1,1);
        gbc.fill = GridBagConstraints.NONE;
        //指定组件在一个单元格内靠在它的什么部位
        gbc.anchor = GridBagConstraints.CENTER;
        gbc.weightx = 0;
        gbc.weighty = 0;
        add(btnOk,gbc,0,3,1,1);
        add(btnCancel,gbc,1,3,1,1);
        ……

    private void add(JComponent c, GridBagConstraints gbc, int x, int y, int w, int h)
      {
        //指定单元格的起始列、起始行和跨越的列数、跨越的行数
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = w;
        gbc.gridheight = h;
        getContentPane().add(c,gbc);
      }