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

Как я могу получить frame для запуска функции завершения при нажатии кнопки закрытия?Функция запуска на JFrame close

Редактировать: Я попытался запустить это, но по какой-то причине он не распечатывает тест (однако программа закрывается). Кто-нибудь есть идея, что может быть проблемой?

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

ответ

13

Вы можете использовать addWindowListener:

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

См void windowClosing(WindowEvent e) и Class WindowAdapter тоже.

+0

Должен ли я создать новый класс, который расширяет JFrame и реализует WindowAdapter? (или нормально держать фрейм как JFrame?) Это еще не работает, и я получаю предупреждение «Метод WindowClosed (WindowEvent) из типа new WindowAdapter() {} никогда не используется локально» on функция WindowClosing – Mattias

+0

Отправьте свой код после внесенных изменений. – Maroun

+0

Хорошо, я добавил код в качестве редактирования. – Mattias

1

Если вы хотите завершить свою программу после закрытия JFrame, вам необходимо установить операцию закрытия по умолчанию на вашем JFrame.

В вашем конструкторе JFrame записи:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Если вы просто хотите вызвать метод, когда окно закрывается и не прекращается всю программу, чем идти с ответом Марун.

+0

Я хотел бы сделать (запустить функцию, а затем завершить). Вот мой текущий код: \t \t frame.addWindowListener (новый WindowAdapter() { \t \t \t общественного недействительными WindowClosing (WindowEvent е) { \t \t \t \t System.out.println ("тест"); \t \t \t \t frame.dispose(); \t \t \t} \t \t}); Проблема в том, что он не печатает «тест». Есть ли у вас какие-либо идеи, что может быть проблемой? – Mattias

+1

Метод "windowClosing" не "WindowClosing". Вы должны переопределить его, поэтому оно должно быть точным именем. –

13

Не только вы должны добавить слушателя окна, вы должны установить операцию закрытия по умолчанию, чтобы ничего не делать при закрытии. Это позволяет выполнять код.

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

Наконец, вам нужно позвонить в Системный выход, чтобы фактически остановить работу вашей программы.

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

+1 для ответа, но особенно '@ Override'. Очень хороший совет. Нет (пересматривает) *** отличный совет ***. :) –

+1

+1. В самом деле. Я с @AndrewThompson :) – Maroun

0

Метод Frame.dispose() не останавливает программу. Чтобы завершить программу, вам необходимо вызвать метод System.exit (0)

Смежные вопросы