2013-01-16 34 views
1

在顯示窗口之前是否有Java WindowListener被調用?在顯示窗口之前是否有Java WindowListener被調用?

我都試過windowOpened(下面的例子)和componentShown。在顯示窗口之後,這兩者都會被調用。有沒有任何聽衆在之前被稱爲窗口顯示?

window.addWindowListener(new WindowAdapter() { 
    @Override 
    public void windowOpened(WindowEvent evt) { 
     < ... code ... >  
    } 
}); 
+0

鑑於[WindowListener方法](http://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html),沒有。 –

+2

你是一個踢show()的人,所以你可以自己開火嗎? – flup

+3

不會覆蓋'setVisisble()'/'show()' - 方法,它會在打開窗口之前調用您的代碼,符合您的需求? – Zhedar

回答

1

如你所願這裏所作的評論編譯的答案(也許有時候有人將搜索)。)
這裏的解決方案可以通過繼承JFrame來覆蓋你的JFramesetVisible(boolean) - 方法。

這種方法看起來是這樣的:

@Override 
public void setVisible(boolean visible) 
{ 
    if(visible) //Window is going to be shown 
    { 
     //your code you want to be executed before window is shown 
    } 

    //finally show or hide window 
    super.setVisible(visible); 
} 

由於在這種情況下,你需要重構代碼以使用新的子類,只要找到並更換每一個「新的JFrame」到「新YourFrameSub」(每編輯器或IDE應該能夠做到這一點)。
這樣你可以確保你的代碼被執行,之前顯示任何東西。
請記住使用SwingWorker或某物。像這樣在JDialog中顯示類似ProgressBar的東西以向用戶示出將花費比預期更長的時間。當然,這隻有在您計劃執行長時間運行的操作(如執行IO操作)時纔會發生。

相關問題