我有一个JFrame
,其中包含以下布局和组件:
_________________________________________
| __________________________________ |
| |JTree | Panel2 | * |
| |(Panel1)| (other controls) |<-> |
| |________|_______________________| |
|__________*_____________________________|
这些位于主JFrame
的内容窗格中
我想要的是当我最大化窗口时,这些组件会相应地调整大小
现在发生的事情是它们保持当前的大小,并且在我有箭头和星星的地方存在巨大差距。(侧面和底部)。
我想继续打包。
我已经为内容窗格使用了null布局,并从可视化设计器中删除了组件
如何让控件始终在mazimize上调整大小?
答案 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的优点在于你可以在不弄乱设计器的情况下更改生成的代码,并且生成的代码实际上非常漂亮:)