GridBagLayout不会为每一行更改

时间:2016-02-22 03:46:18

标签: java swing layout gridbaglayout

我希望三个组件的第一行间隔为1,0.5,0.5的权重。所以第一个组件应该是其他组件的两倍。在第二行中,我希望所有三个组件的重量为0.5(相同长度)。 GridBagLayout表现得很奇怪。

public class Main extends JFrame{

public Main() {
        super();

        this.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        c.fill = GridBagConstraints.HORIZONTAL;

        JLabel label = new JLabel("Label 1");
        c.weightx = 1.0;
        c.gridx = 0;
        c.gridy = 0;
        label.setBorder(BorderFactory.createLineBorder(Color.red));
        this.add(label, c);

        JLabel label2= new JLabel("Label 2");
        c.weightx = 0.5;
        c.gridx = 1;
        c.gridy = 0;
        label2.setBorder(BorderFactory.createLineBorder(Color.red));
        this.add(label2, c);

        JLabel label3= new JLabel("Label 3");
        c.weightx = 0.5;
        c.gridx = 2;
        c.gridy = 0;
        label3.setBorder(BorderFactory.createLineBorder(Color.red));
        this.add(label3, c);

        JLabel label4 = new JLabel("1");
        c.weightx = 0.5;
        c.gridx = 0;
        c.gridy = 1;
        label4.setBorder(BorderFactory.createLineBorder(Color.red));
        this.add(label4, c);

        JLabel label5= new JLabel("2");
        c.weightx = 0.5;
        c.gridx = 1;
        c.gridy = 1;
        label5.setBorder(BorderFactory.createLineBorder(Color.red));
        this.add(label5, c);

        JLabel label6= new JLabel("3");
        c.weightx = 0.5;
        c.gridx = 2;
        c.gridy = 1;
        label6.setBorder(BorderFactory.createLineBorder(Color.red));
        this.add(label6, c);


        this.setSize(900,900);
        this.setVisible(true);

    }
    public static void main(String[] args){
        new Main();
    }
}

1 个答案:

答案 0 :(得分:4)

  

我希望三个组件的第一行间隔为权重1,0.5,0.5。

"权重"仅在调整帧大小时使用。也就是说,组件最初以其首选尺寸显示。然后,当您增加框架中的空间时,将按照您指定的比例分配额外的空间。

如果您想始终保持比例,那么您还需要使用该比率的首选尺寸创建组件。

或者您可以使用Relative Layout。它旨在避免此问题,并允许您指定每个组件的相对大小。显然,您需要为每一行创建多个面板。