2013-05-04 12 views
10
void terminate() {} 
protected JFrame frame = new JFrame(); 

Jak mogę uzyskać frame, aby uruchomić funkcję zakończenia po naciśnięciu przycisku zamykania?Funkcja uruchamiania na JFrame close

Edytuj: Próbowałem uruchomić to, ale z jakiegoś powodu nie jest drukowany test (jednak program się zamyka). Czy ktoś ma pomysł, co może być problemem?

frame.addWindowListener(new WindowAdapter() { 
    public void WindowClosing(WindowEvent e) { 
     System.out.println("test"); 
     frame.dispose(); 
    } 
}); 

Odpowiedz

13

Można użyć addWindowListener:

frame.addWindowListener(new WindowAdapter() 
{ 
    public void windowClosing(WindowEvent e) 
    { 
     ... //call terminate 
     ... 
    } 
}); 

Zobacz void windowClosing(WindowEvent e) i Class WindowAdapter też.

+0

Czy muszę utworzyć nową klasę rozszerzającą JFrame i implementującą WindowAdapter? (czy jest to w porządku, aby zachować ramkę jako JFrame?) To tak naprawdę jeszcze nie działa i otrzymuję ostrzeżenie "Metoda WindowClosed (WindowEvent) z typu new WindowAdapter() {} nigdy nie jest używana lokalnie" on funkcja WindowClosing – Mattias

+0

Publikuj swój kod po wprowadzonych zmianach. – Maroun

+0

OK, dodałem kod jako zmianę. – Mattias

1

Jeśli chcesz zakończyć program po zamknięciu JFrame, musisz ustawić domyślną operację zamknięcia na ramce JFrame.

W konstruktora swojego zapisu JFrame:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Jeśli chcesz po prostu wywołać metodę, gdy okno jest zamknięte i nie zakończyć cały program, niż iść z odpowiedzią Maroun.

+0

Chciałbym zrobić oba (uruchomić funkcję, a następnie zakończyć). Oto mój bieżący kod: \t \t frame.addWindowListener (nowa WindowAdapter() { \t \t \t public void WindowClosing (WindowEvent e) { \t \t \t \t System.out.println ("test"); \t \t \t \t frame.dispose(); \t \t \t} \t \t}); Problem polega na tym, że nie drukuje "test". Czy masz pojęcie, jaki może być problem? – Mattias

+1

Metoda to "windowClosing", a nie "WindowClosing". Musisz go zastąpić, więc musi to być dokładna nazwa. –

13

Nie tylko musisz dodać detektora okna, musisz ustawić domyślną operację zamknięcia, aby nic nie robić na zamknięciu. Pozwala to na wykonanie kodu.

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent event) { 
      exitProcedure(); 
     } 
    }); 

Wreszcie należy wywołać wyjście systemowe, aby rzeczywiście zatrzymać działanie programu.

public void exitProcedure() { 
    frame.dispose(); 
    System.exit(0); 
} 
+1

+1 za odpowiedź, ale szczególnie "@ Zastąpienie". Bardzo dobra rada. Nie (ponownie przemawia) *** doskonała rada ***. :) –

+1

+1. W rzeczy samej. Jestem z @AndrewThompson :) – Maroun

0

Metoda frame.dispose() nie powoduje zakończenia programu. Aby zakończyć program, należy wywołać metodę System.exit (0)