2

我有JFrame以下布局和组件:

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

这些在 main 的内容窗格中JFrame
我想要的是当我最大化窗口时,这些组件会相应地调整大小。
现在发生的事情是它们保持当前大小,并且在我有箭头和星星的地方有一个巨大的差距。(侧面和底部)。
我想保持包装。
我对内容窗格使用了空布局,并从视觉设计器中删除了组件。
如何使控件始终在 mazimize 上调整大小?

4

3 回答 3

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);
于 2011-04-03T14:03:47.407 回答
3

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

于 2011-04-03T13:48:43.883 回答
2

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

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

我实际上使用 MigLayout 作为表格布局。我将组件放在单元格中,并为每个单元格设置“增长”等属性 - 如果我想扩展调整大小、最小/首选项/最大大小、对齐方式等。我可以将组件设置为跨单元格,我会得到什么我想。

WindowBuilder 的伟大之处在于您可以更改生成的代码而不会弄乱设计器,并且生成的代码实际上很漂亮:)

于 2011-04-03T14:15:30.800 回答