2012-05-06 5 views
14

Мне было интересно, есть ли способ, нажав на «X», чтобы программа выполнила некоторый код перед закрытием JFrame. Метод setDefaultCloseOperation() принимает только целое число.JFrame On Close Operation

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

ответ

11

Возможно, вас заинтересует WindowListener. WindowListener tutorial.

+0

спасибо, очень. То, что им после. –

+2

Или вы можете использовать [WindowAdapter] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/WindowAdapter.html) как удобство для создания объектов-слушателей. –

15

@ У Джеффри есть хороший ответ, но вы должны подумать о том, что вы пытаетесь сделать. Если вы действительно хотите что-то сделать после закрытия фрейма, то WindowListener - это путь. Однако, если вы ищете место для очистки и изящного выключения, тогда вам, вероятно, понадобится shutdown hook. Используя WindowListener, код будет запускаться, как вы сказали, только нажатием кнопки «X». Но что делать, если пользователь запускает приложение на переднем плане терминала и убивает его с помощью Ctrl + C? Что делать, если пользователь убивает процесс из командной строки или из диспетчера задач?

+2

отредактирован, чтобы указать последний javadoc :-) +1 btw – COD3BOY

+0

Вау, спасибо, что ответили. Я использую это, чтобы сохранить некоторые данные при закрытии фрейма. –

+0

@Sanjay: Я решил связать jdk6, потому что 1) по моему опыту, все больше людей по-прежнему используют 6, а не 7, а 2) Runtime.addShutdownHook() не меняет лижу между 6 и 7. –

14
this.addWindowListener(new WindowAdapter(){ 
       public void windowClosing(WindowEvent e){ 
        int i=JOptionPane.showConfirmDialog(null, "Seguro que quiere salir?"); 
        if(i==0) 
         System.exit(0);//cierra aplicacion 
       } 
      });