将GridLayout JPanel放置到GridBagLayout JFrame上

时间:2014-03-16 22:46:22

标签: java swing layout

我尝试使用GridBagLayout将两个JPanel放到JFrame上。 第一个JPanel使用gridLayout创建35列和27行JButton,宽度应为JFrame的3/4。该面板需要填充可用的垂直空间。 第二个JPanel也使用gridLayout,并应填充主JFrame的最后1/4。

不幸的是,我的第一个JPanel(sPan)甚至不能正确地适合屏幕,并且迫使整个第二个JPanel(cPan)离开屏幕。如何约束这些值,使其只占用屏幕上允许的比例,而不会相互移动?

如果我使用带有背景颜色的空白JPanel和我的代码,一切都很完美:

Blank JPanel proportions http://i61.tinypic.com/1o7yo5.png [1]

但是,当我使用由JButton组成的JPanel时,比例会完全混乱:

JButtons JPanel proportions http://i58.tinypic.com/34td1r9.png [2]

我推测当我实例化我的sPan对象时,它会调整每个按钮的大小以适应整个JFrame的大小。然后,当我实例化cPan对象并尝试将其放在sPan对象旁边时,按钮不会调整自身大小以适应主JFrame中的其他面板。有谁知道如何解决这个问题?

我必须使用GridBagLayout进行此分配,因此使用普通的gridLayout不是一个选项。 任何有关发生事件的提示都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

您可以简单地处理两列吗?第一个占可用宽度的5/6 ,第二个剩下的1/6

您可以尝试以下方法:

final JPanel sPan = new JPanel();
sPan.setBackground(Color.RED);
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 5 / 6f;  // change this value...
constraints.weighty = 1.00;
add(sPan, constraints);

final JPanel cPan = new JPanel();
cPan.setBackground(Color.BLUE);
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1 / 6f;  // ... and this one.
constraints.weighty = 1.00;
add(cPan, constraints);

请注意:我已使用背景颜色JPanels替换为空JPanels,因此即使这样,您也可以看到正在发生的事情。< / p>