2016-06-09 3 views
0

В приложении java swing какая разница между следующими операциями? Когда я предпочитаю использовать один над другим?Java Swing закрывает окно с помощью setDefaultCloseOperation Vs. addWindowListener

Я видел как из них в различных примерах, разбросанных по всему интернету:

// Have the window exit on close 
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

- ИЛИ -

// Set up a window listener to exit on close 
mainFrame.addWindowListener(new WindowAdapter() { 
    public void windowClosing(WindowEvent windowEvent) { 
     System.exit(0); 
    } 
}); 

Второй подход, как представляется, намного больше кода, так что я» я удивляюсь, почему я так широко его использую. Есть ли преимущество в этом подходе к первому?

+3

Второй способ позволяет вам делать дополнительные вещи: чистить ресурсы, спасать вещи, обращаться в полицию, что угодно. См. Http://stackoverflow.com/questions/6084039/create-custom-operation-for-setdefaultcloseoperation/6084220. – Berger

ответ

1

Я бы использовал первый вариант, если вам нужен только стандарт закрытия. Как сказал @Berger, вы можете добавить дополнительные функции, если вы выберете второй метод.

2

На самом деле они оба же, этот код из JFrame:

protected void processWindowEvent(WindowEvent e) { 
     super.processWindowEvent(e); 

     if (e.getID() == WindowEvent.WINDOW_CLOSING) { 
      switch(defaultCloseOperation) { 
       case HIDE_ON_CLOSE: 
       setVisible(false); 
       break; 
       case DISPOSE_ON_CLOSE: 
       dispose(); 
       break; 
       case DO_NOTHING_ON_CLOSE: 
       default: 
       break; 
       case EXIT_ON_CLOSE: 
        // This needs to match the checkExit call in 
        // setDefaultCloseOperation 
       System.exit(0); 
       break; 
      } 
     } 
    } 

Однако, вызывая setDefaultCloseOperation является предпочтительным, поскольку он использует текущий существующий код JFrame (повторного usablity).