为什么setPrefferedSize()方法不适用于JPanel?

时间:2010-03-06 05:43:02

标签: java swing

我创建了n个JPanels,在每个JPanel中我添加了3个组件。我将这些JPanel添加到新的JPanel中作为行。 n JPanels的布局是FlowLayout,主面板是BorderLayout。 setPrefferedSize()方法适用于我在n个JPanels中添加的组件,但它不适用于n个JPanels。 我正在尝试npanels [i] .setPrefferedSize(new Dimension(300,25)) 我希望JPanel的高度等于其中添加的组件的高度(即25)。 是否有任何限制,JPanel的高度应该是一些最小值? 请帮助我尝试了很多东西,但没有工作.....

2 个答案:

答案 0 :(得分:1)

某些布局管理员倾向于忽略尺寸设置......

在某处读取BorderLayout可能会忽略widthNORTH组件的SOUTHheightEAST的{​​{1}}, WEST ...

会忽略heightwidth

可能是这种情况吗?

另外,您能提供解释发生什么的截图或图表吗?

答案 1 :(得分:1)

  

setPrefferedSize()方法是   工作正常的组件

通常无需为组件设置首选大小。 Swing会自动计算首选大小。

  

n JPanels的布局是FlowLayout ...   我已添加到JPanels但它   不适用于n JPanels

同样,不需要设置每个面板的首选大小。将根据所有组件的首选大小自动计算大小。

  

主面板是BorderLayout

这没有意义,因为您无法将“n”面板添加到BorderLayout。您只能向North,Center和South添加一个组件,这样您最多可以拥有3个不同的垂直显示面板。在这种情况下,如果使用frame.pack(),则每个面板将以其首选大小显示。另一方面,如果你使用frame.setSize(300,400),那么中心面板的高度将被拉伸。

由于您希望所有面板都具有相同的尺寸,您可能应该使用GridLayout,否则您可以尝试使用BoxLayout。阅读Swing教程。它解释了使用布局管理器的所有内容。

如果您需要更多帮助,请发布SSCCE