为什么getPreferredSize()返回的大小对于这个JDialog来说太小了?

时间:2010-03-25 17:32:25

标签: java swing layout

在我们的产品中,我们的框架基本上是三个继承级别,基本上是JDialog。此框架会覆盖默认的pack()方法,如下所示:

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

@Override
public Dimension getMaximumSize(){
    return super.getPreferredSize();
}
几乎一切都在屏幕上,

pack()就会被调用。很多这些窗口都有一个标题栏,一些工具栏,一个包含主要内容的窗格(通常可以是空的),底部有一个状态栏。

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

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

2 个答案:

答案 0 :(得分:0)

我相信大多数Layouts将使用获取容器的直接子级的首选大小的基本前提,然后返回包含使用其preferredSizes布局的那些组件的最小Dimension(快速检查源代码显示)这是FlowLayout,BoxLayout和GridLayout的情况。所以我可以提供两个建议:

  1. 为您使用的布局(或您最常使用的布局)阅读getPreferredLayoutSize(Container)的来源,并确认他们使用首选尺寸进行计算。
  2. 为最低级别的组件(不是其他组件的组合的项目)显式设置preferredSize,然后这些组件的组合应该具有相应的相应的preferredSize。

答案 1 :(得分:0)

看起来在pack()getPreferredSize()发生后,对话框中添加了一些内容,但这些添加内容并没有正确调整大小。

通常情况下,答案显然是行人而且显而易见。