2010-03-25 107 views
1

在我们的产品中,我们有基本上是三个继承层次的框架,基本上是JDialog。该框架覆盖默认pack()方法如下所示:为什么getPreferredSize()返回对于此JDialog来说太小的大小?

@Override 
public void pack() { 
    this.setSize(getMaximumSize()); 
    validate(); 
    super.pack(); 
} 

@Override 
public Dimension getMaximumSize(){ 
    return super.getPreferredSize(); 
} 

pack()这里被称为后几乎所有在屏幕上。许多这些窗口都有一个标题栏,一对工具栏,一个保存主要内容的窗格(通常可以大部分为空)以及底部的状态栏。

我的问题似乎是,当它调用容器的getPreferredSize()时,结果太小,即宽度看起来不错,但高度不是。通过阅读文档,如果没有明确设置(我非常肯定它不是),则首选大小似乎基于布局管理器进行计算。我不太确定它是如何计算的,或者我是否应该先做其他事情。

任何人对我的问题可能在这里有什么想法或想法?它并不总是太小,只是在某些时候。请让我知道其他信息/代码可能有助于弄清楚这一点。谢谢。

回答

0

它看起来像有是要添加的东西到对话框中pack()getPreferredSize()发生后,然而本增补不正确调整大小的东西。

往往是这样,答案结果是相当流行和明显。

0

我相信大部分布局将使用获取容器的直接子元素的首选大小的基本前提,然后返回将包含使用其preferredSizes布置的那些组件的最小尺寸(源代码的快速检查这表明FlowLayout,BoxLayout和GridLayout就是这种情况)。所以两个建议我可以提供有:

  1. 阅读getPreferredLayoutSize(容器)的源使用(您最常使用或那些)的布局,并确认他们正在使用的首选大小为进行计算。
  2. 为最低级别组件(不是其他组件的组合)显式设置preferredSize,那么这些组件的组合应该在关系中具有适当的preferredSize。
相关问题