2010-06-20 12 views
23

Per la vita di me non riesco a trovare dettagli su Java Swing Actions: '(Quando li ho incontrati ho subito capito la loro utilità. Finora è stato tutto facile lavorarci. Ora sono bloccato con una piccola cosa : come faccio a farli funzionare manualmente voglio dire con il codice si noti che sto costruendo la GUI usando Netbeans (se questo fa alcuna differenza) sono venuto per quanto riguarda:?.Come posso richiamare manualmente un'azione in swing?

Application a = Application.getInstance(JPADemoApp.class); 
ApplicationContext ctx = a.getContext(); 
ActionMap am = ctx.getActionMap(JPADemoView.class, this.app); 
Action act = am.get("fetchOrders"); 

(ho scritto tutto su linee separate per semplificare il debugging)

Così ora ho un riferimento valido per l'azione. ora come faccio a eseguire esso?

risposta

8

Se si desidera eseguire manualmente l'azione, è possibile generare un valore ActionEvent e passarlo nel metodo actionPerformed che il proprio Action deve implementare, poiché l'interfaccia Action estende ActionListener.

+2

mi sono imbattuto in questa domanda di nuovo, e la risposta è - a mio parere - più dettagliata rispetto a quella di @ b1nary.atr0phy. Anche se ha più upvotes, terrò questo accettato. Immagino che l'altro attiri più voti in quanto è copia/incollabile. Forse un esempio di codice migliorerebbe questa risposta? – exhuma

+0

Definitivamente, un esempio di codice sarebbe utile - non per supportare la programmazione di copia/incolla, ma illustrerebbe il concetto in un modo più comprensibile per un programmatore. – Suma

28

Si può semplicemente richiamare il metodo della manifestazione azione diretta:

for(ActionListener a: buttonExample.getActionListeners()) { 
    a.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null) { 
      //Nothing need go here, the actionPerformed method (with the 
      //above arguments) will trigger the respective listener 
    }); 
} 
+0

È possibile rimuovere le parentesi graffe vuote. Vedi http://tinybrain.de/1007469 –

+0

Questo è molto meglio e più semplice: https://stackoverflow.com/a/5109301/540552 –

Problemi correlati