當JFrame處於最大化狀態時,getBounds
方法會返回與其當前狀態匹配的邊界。我需要的是「還原邊界」(即,如果用戶在Windows平臺上單擊「還原下來」時將窗口設置爲的大小/位置),而不實際將其設置爲非最大化狀態。查找JFrame處於最大化狀態時的恢復邊界
我問的原因是因爲我希望將邊界保存爲首選項,然後當用戶重新打開應用程序時,將窗口設置爲保存的邊界(如果這是最後一個狀態,則將其最大化)。
我認爲當添加最大化窗口的偵聽,但在我看來,監聽器後通知其最大化,而我需要通知它最大化右之前。
當JFrame處於最大化狀態時,getBounds
方法會返回與其當前狀態匹配的邊界。我需要的是「還原邊界」(即,如果用戶在Windows平臺上單擊「還原下來」時將窗口設置爲的大小/位置),而不實際將其設置爲非最大化狀態。查找JFrame處於最大化狀態時的恢復邊界
我問的原因是因爲我希望將邊界保存爲首選項,然後當用戶重新打開應用程序時,將窗口設置爲保存的邊界(如果這是最後一個狀態,則將其最大化)。
我認爲當添加最大化窗口的偵聽,但在我看來,監聽器後通知其最大化,而我需要通知它最大化右之前。
我在我的應用程序的用戶首選項中存儲了extendedState
,窗口位置和框架大小。添加一個ComponentListener
是要走的路。您將不得不聽取componentMoved
,componentResized
和componentShown
方法。當從frame.getExtendedState() == JFrame.NORMAL
返回值時,請將frame.getBounds()
的矩形存儲爲非最大值。如果getExtendedState()
返回JFrame.MAXIMIZED_BOTH
,則不要存儲當前界限,但確實存儲擴展的事實。只要你只存儲最後JFrame.NORMAL
擴展狀態的值,你就會很好。
我認爲增加一個偵聽 時,窗口最大化,但它 我看來,聽者 通知其最大化,我會 需要通知其 最大化權之前之後。
這應該工作。添加一個偵聽器來處理調整大小的組件。當事件被觸發時,在更新保存的邊界之前,檢查以確保窗口未處於最大化狀態。
爲什麼需要componentShown方法? – fent 2011-02-05 14:00:33
@這是死路一條,老實說,我不記得了。我從我的代碼中實現它的方式複製了這些,並且沒有與我一起使用該代碼。現在閱讀它看起來componentShown方法可以被忽略,因爲*移動*和*調整大小*應該覆蓋所有情況。 – Nemi 2011-02-05 16:53:54
是的,我注意到了,因爲我試圖和你一樣做同樣的事情。感謝你的回答。 – fent 2011-02-08 18:41:37