2012-05-08 12 views
7

Sto cercando di separare la funzione dallo stato nella mia applicazione GUI mediante l'uso di oggetti Action. Ho avuto successo nell'usarli per creare voci di menu e pulsanti con la stessa funzionalità.AbstractAction come WindowListener

Il mio problema è questo: voglio avere la stessa azione sia per la voce "uscita" nel mio menu che per il pulsante di chiusura del frame.

Attualmente sono stato in grado di risolverlo aggiungendo quanto segue WindowListener al telaio:

private class MainWindowListener extends WindowAdapter { 
    @Override 
    public void windowClosing(WindowEvent e) { 
     new ExitAction(model).actionPerformed(new ActionEvent(e.getSource(), e.getID(), "Exit")); 
    } 
} 

non c'è un modo più semplice più semplice per fare questo?

risposta

6

Inoltro eventi è utile, ma è anche possibile utilizzare dispatchEvent(), come illustrato here.

Addendum: Altri esempi che utilizzano Action sono indicati di seguito.

  • LinePanel che collega pulsanti e chiavi.
  • ScrollAction che utilizza le azioni di oscillazione esistenti.
  • KeyPadPanel che illustra le azioni di inoltro.
  • GraphPanel che mostra le azioni dell'editor grafico in una barra degli strumenti.
+0

Un approccio correlato consiste nel richiamare il metodo 'doClick()' di un pulsante, come illustrato [qui] (http://stackoverflow.com/a/5797965/230513). – trashgod

+0

Questa cosa è qualcosa di nuovo per me, e abbastanza interessante :-) –

+0

Quindi, se ho capito bene, usare dispatchEvent() è un po 'l'opposto di quello che sto facendo: mantenere il codice in WindowListener invece che in un azione, e facendo in modo che l'azione invii un evento lì invece di fare in modo che WindowListener inoltri il suo evento all'azione? Interessante ... – FinalArt2005