2011-12-30 2 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

ответ

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, прежде чем добавить слушателя окна ... –

+0

Вот, сила [sscce] (http://sscce.org/)! Я почти уверен, что тоже сделал что-то подобное. :-) – trashgod

+0

согласен с ... sscce ... – mKorbel