Почему этот прослушиватель не обнаруживает события закрытия окна?

#java #swing #events #awt #windowlistener

#java #swing #Мероприятия #awt #windowlistener

Вопрос:

Я пытаюсь прослушивать события по одному Frame каналу WindowStateListener .

 import java.awt.Frame;
import java.awt.Label;

import java.awt.event.WindowStateListener;
import java.awt.event.WindowEvent;

public class UserInterface implements WindowStateListener
{
    public static void main(final String[] arguments)
    {
        UserInterface userInterface = new UserInterface();
    }

    public UserInterface()
    {
        Frame frame = new Frame("Graphics Example");
        frame.addWindowStateListener(this);
        frame.add(new Label("Hello, world!");
        frame.pack();
        frame.setVisible(true);
    }

    public void windowStateChanged(WindowEvent event)
    {
        System.out.println(event.paramString();
    }
}
 

Он отлично работает для событий минимизации, но не для событий закрытия. WINDOW_CLOSING это определенно допустимое WindowEvent значение, и это определенно то, что Frame может выдать. Так почему же он не передается windowStateChanged() ?

Ответ №1:

WindowStateListeners не уведомляются о событиях закрытия окна. Они уведомляются только об изменениях состояния окна, таких как iconified или de-iconified. Если вы хотите закрыть события, реализуйте WindowListener (или расширьте WindowAdapter). Этот учебник объясняет это http://download.oracle.com/javase/tutorial/uiswing/events/windowlistener.html .

Ответ №2:

Вы можете использовать это.

 frame.addWindowListener(new java.awt.event.WindowAdapter()
{
public void windowClosing(WindowEvent winEv)

}}
 

это определенно скомпилировалось бы.

 class TestSnippet {
    public static void main(Sring[] args) {

        // START: copy/pasted snippet
        frame.addWindowListener(new java.awt.event.WindowAdapter()
        {
        public void windowClosing(WindowEvent winEv)

        }}
        // END: copy/pasted snippet
    }
}
 

(Заметки прохожего) Ну, за исключением..

 I:projTestSnippet.java:7: ';' expected
        public void windowClosing(WindowEvent winEv)
                                                    ^
I:projTestSnippet.java:9: ')' expected
        }}
         ^
2 errors

Tool completed with exit code 1
 

Комментарии:

1. это определенно скомпилировалось бы. В этом прослушивателе мы можем выполнить задачу, которую мы должны выполнить, когда мы закрываем окно.

2. Хорошо, теперь я понимаю, что вы пытались сказать. Я пишу.

3. Не стесняйтесь редактировать мои дополнения. Но, пожалуйста, исправьте фрагмент (или сделайте его еще более общим) в то же время. 1 для указателя на WindowListener .