关于调整大小控制的摆动问题最大化

时间:2011-04-03 13:39:21

标签: java swing user-interface layout-manager

我有一个JFrame,其中包含以下布局和组件:

 _________________________________________ 
 |  __________________________________    | 
 |  |JTree   |   Panel2              | *  |
 |  |(Panel1)| (other controls)      |<-> |
 |  |________|_______________________|    |
 |__________*_____________________________|

这些位于主JFrame的内容窗格中 我想要的是当我最大化窗口时,这些组件会相应地调整大小 现在发生的事情是它们保持当前的大小,并且在我有箭头和星星的地方存在巨大差距。(侧面和底部)。
我想继续打包。
我已经为内容窗格使用了null布局,并从可视化设计器中删除了组件 如何让控件始终在mazimize上调整大小?

3 个答案:

答案 0 :(得分:4)

如果您希望两个面板具有相同的大小,每个面板占据主窗口的一半,请使用GridLayout:

getContentPane().setLayout(new GridLayout(1,2));
getContentPane().add(Panel1);
getContentPane().add(Panel2);

如果您希望一个面板具有恒定宽度,请使用BorderLayout:

getContentPane().setLayout(new BorderLayout());
getContentPane().add(Panel1,BorderLayout.EAST);
getContentPane().add(Panel2,BorderLayout.CENTER);

如果您想要更复杂的行为,例如要保持1:2的宽度比,你必须使用GridBagLayout这是最强大的布局,但也是最复杂的:

getContentPane().setLayout(new GridBagLayout());
getContentPane().add(Panel1,new GridBagConstaints(0,0,1,1,1,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);
getContentPane().add(Panel2,new GridBagConstaints(1,0,1,1,2,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);

答案 1 :(得分:3)

不要使用null布局,不要使用表单设计器,而是尝试使用各种布局管理器。 GridBagLayout可能是可以帮助您根据需要创建GUI的管理器之一,但许多人试图避免使用此GUI,除非必要。许多人还为每个JPanel嵌入了自己的布局管理器,因此实际上嵌套了布局管理器。

答案 2 :(得分:2)

如果你搜索那么你可能会得到许多不同的意见。但有一个共同的事实是:在考虑使用视觉设计师之前,您至少需要对某个布局管理器的工作方式有一个基本的了解。

话虽如此,我得到的最好的结果,以及我目前在制作中使用的是伟大的WindowBuilderPro和MigLayout作为布局管理器的组合。

我实际上使用MigLayout作为表格布局。我将我的组件放在单元格中,并将每个单元格设置为“增长”等属性 - 如果我想扩展调整大小,最小/ pref / max大小,对齐等等。我可以将组件设置为跨越单元格而且我得到了什么我想要。

WindowBuilder的优点在于你可以在不弄乱设计器的情况下更改生成的代码,并且生成的代码实际上非常漂亮:)