2014-05-01 18 views
5

Quindi, farò del mio meglio per spiegare questa domanda ...Esiste un modo più efficiente di gestire gli eventi di clic sui pulsanti rispetto a diverse istruzioni if?

Fondamentalmente, ho una GUI la cui finestra principale ha diversi pulsanti (probabilmente circa 10). Sto mettendo i pulsanti stessi in un array, ma quando si tratta di gestire gli eventi click per ogni pulsante, qualcosa di diverso sta per accadere a seconda di quale è stato cliccato.

Invece di fare qualcosa di simile:

@Override 
public void actionPerformed(ActionEvent e) { 
    if(e.getActionCommand().equals("Button1Text") { /* do stuff */ } 
    else if(e.getActionCommand().equals("Button2Text") { /* do stuff */ } 
    else if(e.getActionCommand().equals("Button3Text") { /* do stuff */ } 
    else if(e.getActionCommand().equals("Button4Text") { /* do stuff */ } 
} 

C'è un modo più efficiente per gestire la risposta di ciascun pulsante quando viene cliccato? L'idea è che ogni volta che si fa clic su un pulsante, si apre una nuova finestra per consentire all'utente di eseguire varie attività associate a quel pulsante. Stavo pensando di utilizzare in qualche modo getActionCommand() in combinazione con i metodi Class.forName()/newInstance(), ma non sono sicuro che esista un altro (o più semplice) modo di fare qualcosa del genere.

+1

Probabilmente mi farò sembrare stupido qui, ma perché non assegni ad ogni Button il proprio ActionListener? – Gorbles

risposta

7

L'ActionListener che hai mostrato è talvolta noto come "listener di centralino", e hai ragione di pensare che possa essere migliorato. È un codice abbastanza rigido, che rende difficile il debug e il miglioramento.

migliore penso che sarebbe di non avere la GUI implementare ActionListener a tutti, ma piuttosto di utilizzare le azioni uniche (vale a dire, AbstractActions) per ogni classe di del pulsante e quindi collegare l'azione appropriata nel pulsante appropriato. Per collegarlo con un accoppiamento minimo, considera l'utilizzo dell'iniezione di dipendenza a primavera o Guice.