2010-03-25 25 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。
相關問題