JFrame.HIDE_ON_CLOSE onHide事件?

时间:2013-06-15 03:38:48

标签: java swing jframe windowlistener

我有一个WorldEditor JFrame,用于启动Game JFrame。但是,当Game关闭时,我不希望它结束​​整个程序,因此我将默认关闭操作设置为HIDE_ON_CLOSE。但是,为了节省资源,我在WorldEditor正在运行时暂停Game

如何检测隐藏Game窗口的时间,以便我可以恢复WorldEditor

1 个答案:

答案 0 :(得分:4)

为什么不自己隐藏框架而不是使用默认的HIDE_ON_CLOSE

// inside WindowListener class
public windowClosing(WindowEvent e) {
    yourFrame.setVisible( false );
    // your code here...
}

编辑:来自docs:

  

在任何窗口侦听器之后执行默认关闭操作   处理窗口关闭事件。所以,例如,假设你   指定默认关闭操作是处置帧。您   还实现了一个窗口监听器,用于测试框架是否为   最后一个可见,如果是,则保存一些数据并退出   应用。在这些条件下,当用户关闭一个框架时,   首先会调用window listener。如果它没有退出   应用程序,然后默认关闭操作 - 处理框架    - 然后将被执行。

使用工作示例进行新编辑:

import java.awt.event.*;
import javax.swing.JFrame;

public class ListenerTest extends JFrame implements WindowListener {

public static void main(String[] args) {
    ListenerTest frame = new ListenerTest();
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    frame.setVisible( true );
}

public ListenerTest() {
    this.addWindowListener( this );
}

public void windowActivated(WindowEvent e) {
    System.out.println(" activated ");
}
public void windowClosed(WindowEvent e){
    System.out.println(" closed ");
}
public void windowClosing(WindowEvent e){
    System.out.println(" closing ");
}
public void windowDeactivated(WindowEvent e){
    System.out.println(" deactivated ");
}
public void windowDeiconified(WindowEvent e){
    System.out.println(" deiconified ");
}
public void windowIconified(WindowEvent e){
    System.out.println(" iconified ");
}
public void windowOpened(WindowEvent e){
    System.out.println(" opened ");
}
}

测试一下,以便捕获什么触发哪些事件。