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

Come è possibile ottenere frame per eseguire la funzione di terminazione quando si preme il pulsante di chiusura?Esegui funzione su JFrame close

Modifica: ho provato a eseguire questo, ma per qualche motivo non stampa test (tuttavia, il programma si chiude). Qualcuno ha un'idea di quale potrebbe essere il problema?

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

risposta

13

È possibile utilizzare addWindowListener:

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

Vedi void windowClosing(WindowEvent e) e Class WindowAdapter troppo.

+0

Devo creare una nuova classe che estende JFrame e implementa WindowAdapter? (o va bene mantenere il frame come JFrame?) Non funziona ancora veramente, e ottengo l'avviso "Il metodo WindowClosed (WindowEvent) dal tipo new WindowAdapter() {} non è mai usato localmente" in la funzione WindowClosing – Mattias

+0

Pubblica il tuo codice dopo le modifiche apportate. – Maroun

+0

Ok, ho aggiunto il codice come modifica. – Mattias

1

Se si desidera terminare il programma dopo aver chiuso JFrame, è necessario impostare l'operazione di chiusura predefinita su JFrame.

nel costruttore della vostra scrittura JFrame:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Se si desidera solo per chiamare un metodo quando la finestra è chiusa e non interrompere l'intero programma, piuttosto che andare con la risposta di Maroun.

+0

Mi piacerebbe fare entrambe le cose (eseguire una funzione, quindi terminare). Ecco il mio codice corrente: \t \t frame.addWindowListener (nuova WindowAdapter() { \t \t \t WindowClosing public void (WindowEvent e) { \t \t \t \t System.out.println ("test"); \t \t \t \t frame.dispose(); \t \t \t} \t \t}); Il problema è che non stampa "test". Hai idea di quale potrebbe essere il problema? – Mattias

+1

Il metodo è "windowClosing" non "WindowClosing". Devi sovrascriverlo, quindi deve essere il nome esatto. –

13

Non solo è necessario aggiungere il listener di finestre, è necessario impostare l'operazione di chiusura predefinita per non eseguire nulla alla chiusura. Questo consente al tuo codice di essere eseguito.

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

Infine, è necessario chiamare System exit per interrompere effettivamente l'esecuzione del programma.

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

+1 per la risposta, ma soprattutto '@ Override'. Ottimo consiglio. No (riconsideri) *** consiglio eccellente ***. :) –

+1

+1. Infatti. Sono con @AndrewThompson :) – Maroun

0

Il metodo Frame.dispose() non chiude il programma. Per terminare il programma è necessario chiamare il metodo System.exit (0)