我希望三个组件的第一行间隔为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();
}
}
答案 0 :(得分:4)
我希望三个组件的第一行间隔为权重1,0.5,0.5。
"权重"仅在调整帧大小时使用。也就是说,组件最初以其首选尺寸显示。然后,当您增加框架中的空间时,将按照您指定的比例分配额外的空间。
如果您想始终保持比例,那么您还需要使用该比率的首选尺寸创建组件。
或者您可以使用Relative Layout。它旨在避免此问题,并允许您指定每个组件的相对大小。显然,您需要为每一行创建多个面板。