2011-12-30 47 views
3

我有一個擴展的JDialog有一個窗口監聽器類:的JDialog用的WindowListener - 的windowClosing沒有被解僱

class MyClass extends JDialog { 

    public MyClass() { 
     setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
     addWindowListener(new WindowAdapter() { 

       @Override 
       public void windowClosing(WindowEvent e) { 
        System.out.println("closing..."); 
        //do something... 
       } 

      }); 
    } 

} 

當我在X按鈕點擊,沒有任何反應。而我沒有看到「關閉......」的打印

我失蹤了什麼?

+0

代碼看起來很合理,發佈了一個證明問題的[SSCCE](http://www.sscce.org)。 – camickr 2011-12-30 16:23:44

回答

8

適合我。另請參閱此相關的example

import java.awt.EventQueue; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import javax.swing.JDialog; 

class MyClass extends JDialog { 

    public MyClass() { 
     setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
     addWindowListener(new WindowAdapter() { 

      @Override 
      public void windowClosing(WindowEvent e) { 
       System.out.println("closing..."); 
       //do something... 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       MyClass m = new MyClass(); 
       m.setVisible(true); 
      } 
     }); 
    } 
} 
+3

謝謝你的例子。我發現在添加窗口偵聽器之前我正在調用setVisible ... – 2011-12-30 16:35:07

+0

看着[sscce](http://sscce.org/)的威力!我很確定我也做了類似的事情。 :-) – trashgod 2011-12-30 16:40:15

+0

同意... sscce ... – mKorbel 2011-12-30 18:11:17