2013-01-16 37 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操作)时才会发生。

相关问题