是否存在在Window显示之前调用的Java WindowListener?

时间:2013-01-16 20:47:00

标签: java swing awt event-listener

是否存在在Window显示之前调用的Java WindowListener?

我已经尝试了windowOpened(下面的示例)和componentShown。在显示窗口之后,这两个都被称为。在显示窗口之前是否有任何被称为的监听器?

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

1 个答案:

答案 0 :(得分:1)

如你所愿,这是一个由评论编写的答案。(也许有时会有人会搜索;)) 此处的解决方案可能会通过继承JFrame来覆盖您的setVisible(boolean) JFrame - 方法。

该方法可能如下所示:

@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);
}

在这种情况下,您需要重构代码以使用新的子类,只需找到并将每个“new JFrame”替换为“new YourFrameSub”(每个编辑器或IDE都应该能够这样做)。
通过这种方式,您可以确保执行代码, 之前显示任何内容 请记住使用SwingWorker或某事。像这样在ProgressBar中显示类似JDialog的内容,向用户显示某些内容需要的时间比预期的要长。当然,只有在您计划执行长时间运行的操作(例如执行IO操作)时才会发生这种情况。