我在一个框架中使用网格布局,我想在这个框架中放置两个面板,其中一个占用框架尺寸的三分之一,另外两个占据屏幕的三分之二,我该怎么办?
我试过这个,但它对我没用:
代码:
this.setLayout(new GridLayout(2, 1));
Dimension d2 = new Dimension(2*this.getHeight()/3, this.getWidth());
Dimension d3 = new Dimension(this.getHeight() / 3, this.getWidth());
panel1.setPreferredSize(d2);
panel1.setMaximumSize(d2);
panel1.setMinimumSize(d2);
panel2.setPreferredSize(d3);
panel2.setMaximumSize(d3);
panel2.setMinimumSize(d3);
this.add(panel1);
this.add(panel2);
提前感谢。
答案 0 :(得分:2)
在这种情况下,GridLayout不是正确的布局管理器。 GridLayout将容器中所有组件的宽度和高度设置为彼此相等。尝试手动设置组件的首选大小将没有任何效果,因为布局管理器会在内部处理它。
您可以改为使用GridBagLayout,并使用GridBagConstraints控制组件的权重:
GridBagLayout layout = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
this.setLayout(layout);
JPanel panel1 = new JPanel(), panel2 = new JPanel();
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.weighty = 1.0/3.0;
layout.setConstraints(panel1, constraints);
this.add(panel1);
constraints.weighty = 2.0/3.0;
layout.setConstraints(panel2, constraints);
this.add(panel2);