2016-11-30 36 views
0

我有一個Swing應用程序和一個JSplitPane,並且我想在窗口最大化或恢復時立即獲取JSplitPane的寬度。但我似乎無法得到正確的值,它總是返回JSplitPane的前一個寬度。不是窗口狀態改變後的寬度。Swing windowStateChanged監聽器返回組件的先前屬性值

我知道我必須使用evt.getNewState()來驗證NORMAL和MAXIMIZED_BOTH,但這裏沒關係。

addWindowStateListener(new java.awt.event.WindowStateListener() { 
    public void windowStateChanged(java.awt.event.WindowEvent evt) { 
     System.out.println(jsp.getWidth()); 
    } 
}); 

此打印出1812如果恢復和1120如果最大化。我也嘗試了一些其他組件,並以相同的結果結束。我怎樣才能克服這個問題?

回答

1

我通過使用addComponentListener()和處理JFramecomponentResized事件找到了我自己的解決方案。所有的子組件都在這個事件中更新,所以我能夠獲得新的寬度並執行我的任務。仍然不完美,但足夠接近。有關更多信息,請參見How to Write a Component Listener