2009-10-14 43 views
4

當JFrame處於最大化狀態時,getBounds方法會返回與其當前狀態匹配的邊界。我需要的是「還原邊界」(即,如果用戶在Windows平臺上單擊「還原下來」時將窗口設置爲的大小/位置),而不實際將其設置爲非最大化狀態。查找JFrame處於最大化狀態時的恢復邊界

我問的原因是因爲我希望將邊界保存爲首選項,然後當用戶重新打開應用程序時,將窗口設置爲保存的邊界(如果這是最後一個狀態,則將其最大化)。

我認爲當添加最大化窗口的偵聽,但在我看來,監聽器後通知其最大化,而我需要通知它最大化右之前

回答

10

我在我的應用程序的用戶首選項中存儲了extendedState,窗口位置和框架大小。添加一個ComponentListener是要走的路。您將不得不聽取componentMoved,componentResizedcomponentShown方法。當從frame.getExtendedState() == JFrame.NORMAL返回值時,請將frame.getBounds()的矩形存儲爲非最大值。如果getExtendedState()返回JFrame.MAXIMIZED_BOTH,則不要存儲當前界限,但確實存儲擴展的事實。只要你只存儲最後JFrame.NORMAL擴展狀態的值,你就會很好。

+0

爲什麼需要componentShown方法? – fent 2011-02-05 14:00:33

+1

@這是死路一條,老實說,我不記得了。我從我的代碼中實現它的方式複製了這些,並且沒有與我一起使用該代碼。現在閱讀它看起來componentShown方法可以被忽略,因爲*移動*和*調整大小*應該覆蓋所有情況。 – Nemi 2011-02-05 16:53:54

+0

是的,我注意到了,因爲我試圖和你一樣做同樣的事情。感謝你的回答。 – fent 2011-02-08 18:41:37

0

我認爲增加一個偵聽 時,窗口最大化,但它 我看來,聽者 通知其最大化,我會 需要通知其 最大化權之前之後。

這應該工作。添加一個偵聽器來處理調整大小的組件。當事件被觸發時,在更新保存的邊界之前,檢查以確保窗口未處於最大化狀態。