2010-06-20 10 views
23

Pour la vie de moi, je n'arrive pas à trouver de détails sur Java Swing Actions: '(Quand je les ai rencontrés, j'ai immédiatement réalisé leur utilité.Maintenant, tout cela a été facile à travailler.Je suis coincé avec une petite chose : Comment puis-je les exécuter manuellement Je veux dire par code Notez que je suis la construction de l'interface graphique en utilisant Netbeans (si cela fait une différence) Je suis venu aussi loin que:?.Comment invoquer manuellement une action dans Swing?

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

(j'ai écrit tout sur lignes séparées pour simplifier le débogage)

Alors maintenant, j'ai une référence valide à l'action. maintenant, comment puis-je exécuter?

Répondre

8

Si vous souhaitez exécuter votre action manuellement, vous pouvez générer un ActionEvent et le passer dans la méthode actionPerformed que votre Action doit implémenter, car l'interface Action étend ActionListener.

+2

je suis tombé sur cette question à nouveau, et votre réponse est - à mon avis - plus détaillé que celui de @ b1nary.atr0phy. Même s'il a plus de votes, je vais garder celui-ci accepté. Je suppose que l'autre attire plus de votes car il est copie/pasteable. Peut-être qu'un code-échantillon améliorerait cette réponse? – exhuma

+0

Certainement, un exemple de code serait pratique - pas pour soutenir la programmation copier/coller, mais il illustrerait le concept d'une manière plus compréhensible pour un programmeur. – Suma

28

Vous pouvez simplement invoquer directement la méthode de l'événement d'action:

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

Vous pouvez supprimer les accolades vides. Voir http://tinybrain.de/1007469 –

+0

Celui-ci est beaucoup mieux et plus simple: https://stackoverflow.com/a/5109301/540552 –

Questions connexes