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

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

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


pack()在屏幕上的几乎所有内容都被调用后才被调用。这些窗口中的许多窗口都有一个标题栏,几个工具栏,一个包含主要内容的窗格(通常为空),以及底部的状态栏。

我的问题似乎是当它为容器调用getPreferredSize()时,结果太小了,即宽度似乎还可以,但高度却不然。仔细阅读文档,如果未明确设置首选尺寸,则似乎是根据布局管理器计算出来的(我敢肯定不是)。我不太确定它是如何计算的,或者我是否应该先做其他事情。

有人对我的问题可能有什么想法或想法吗?它有时并不总是太小。请让我知道其他哪些信息/代码可能有助于解决此问题。谢谢。

最佳答案

我相信大多数Layouts都会使用以下基本前提:获得容器的直接子级的首选大小,然后返回最小的Dimension,该最小的Dimension包含使用他们的preferredSizes布局的那些组件(对源代码的快速检查表明这是FlowLayout,BoxLayout和GridLayout的大小写)。因此,我可以提供两个建议:


阅读getPreferredLayoutSize(Container)的源以获取您使用的布局(或您最常使用的布局),并确认它们正在使用首选的尺寸进行计算。
为最低级别的组件(不是其他组件的组合)显式设置一个preferredSize,然后这些组件的组合应具有适当的关系优选。

关于java - 为什么getPreferredSize()返回的大小对于此JDialog来说太小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2517938/

10-10 23:01