2016-06-09 6 views
0

In einer Java-Swing-Anwendung, was ist der Unterschied zwischen den folgenden Operationen? Wann würde ich es vorziehen, eines über dem anderen zu verwenden?Java Swing schließt ein Fenster mit setDefaultCloseOperation Vs. addWindowListener

Ich habe diese beiden in verschiedenen Beispielen zu sehen über das Internet verstreut:

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

- ODER -

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

Der zweite Ansatz scheint so viel mehr Code zu sein, ich Ich wundere mich, warum ich es so weit verbreitet sehe. Hat dieser Ansatz gegenüber dem ersten einen Vorteil?

+3

Mit der zweiten Möglichkeit können Sie zusätzliche Dinge tun: Ressourcen bereinigen, Material sparen, die Polizei kontaktieren, was auch immer. Siehe: http://stackoverflow.com/questions/6084039/create-custom-operation-for-setdefaultcloseoperation/6084220 – Berger

Antwort

1

Ich würde die erste Option verwenden, wenn Sie nur einen Standard schließen möchten. Wie @Berger sagte, können Sie zusätzliche Funktionalität hinzufügen, wenn Sie die zweite Methode wählen.

2

Eigentlich sie beide das gleiche, dieser Code von 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; 
      } 
     } 
    } 

jedoch setDefaultCloseOperation Aufruf vorzuziehen ist, da sie den aktuellen vorhandenen Code von JFrame (Wieder usablity) nutzen.