如何在两帧之间分割帧?

时间:2015-10-29 13:33:44

标签: java jframe jpanel layout-manager grid-layout

我在一个框架中使用网格布局,我想在这个框架中放置两个面板,其中一个占用框架尺寸的三分之一,另外两个占据屏幕的三分之二,我该怎么办?

我试过这个,但它对我没用:

代码:

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);

提前感谢。

1 个答案:

答案 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);