Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带WindowsStateListener的JDialog_Java_Jdialog_Windowlistener - Fatal编程技术网

Java 带WindowsStateListener的JDialog

Java 带WindowsStateListener的JDialog,java,jdialog,windowlistener,Java,Jdialog,Windowlistener,我试图捕获一个事件,即用户单击JDialog的“X”按钮,并且只有在用户确认后才关闭。下面是我正在做的工作的框架: public class MyDialog extends JDialog { public MyDialog(){ super(); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); ......... } ......... }

我试图捕获一个事件,即用户单击JDialog的“X”按钮,并且只有在用户确认后才关闭。下面是我正在做的工作的框架:

    public class MyDialog extends JDialog {
      public MyDialog(){
        super();
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        .........   
      }
      .........
    }

   public class Waiter implements WindowStateListener{
@Override
public void windowStateChanged(WindowEvent event) {
    System.out.println(event);
    if (event.getNewState() == WindowEvent.WINDOW_CLOSING) {
        if (shouldClose()) {
            dialog.close();
        }
    }
}
   }

   MyDialog dialog = new MyDialog();
   Waiter waiter = new Waiter();
   dialog.addWindowStateListener(waiter);
您可以猜到,当我单击对话框的“X”时,我没有得到打印的消息,因为该方法从未调用过。我不确定问题出在哪里。

是否要使用而不是
WindowsStateListener

试试这个:

MyDialog dialog = new MyDialog();        
dialog.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(final WindowEvent event) {
        System.out.println(event);
        if (shouldClose()) {
            dialog.close();
        }
    }
});
您想使用而不是
WindowsStateListener

试试这个:

MyDialog dialog = new MyDialog();        
dialog.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(final WindowEvent event) {
        System.out.println(event);
        if (shouldClose()) {
            dialog.close();
        }
    }
});