2010-06-20 8 views
23

Por mi vida, parece que no puedo encontrar detalles sobre las acciones de Java Swing: '(Cuando las encontré me di cuenta inmediatamente de su utilidad. Hasta ahora todo ha sido fácil de trabajar. Ahora estoy atascado con una pequeña cosa : ¿Cómo ellos se ejecutan manualmente quiero decir con código Nótese que estoy construyendo la GUI usando Netbeans (si hay alguna diferencia) he llegado tan lejos como:??.¿Cómo invoco manualmente una Acción en Swing?

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

(I escribió sobre todo líneas separadas para simplificar la depuración)

Así que ahora tengo una referencia válida a la acción. ahora, ¿cómo lo ejecuto?

Respuesta

8

Si desea ejecutar su acción manualmente, puede generar un ActionEvent y pasarlo al método actionPerformed que su Action debe implementar, ya que la interfaz Action se extiende a ActionListener.

+2

me encontré con esta pregunta de nuevo, y su respuesta es - en mi opinión - más detallado que el de @ b1nary.atr0phy. A pesar de que tiene más votos positivos, lo mantendré aceptado. Supongo que el otro atrae más votos ya que es copy/pasteable. ¿Tal vez una muestra de código mejoraría esta respuesta? – exhuma

+0

Definitivamente, una muestra de código sería útil, no para soportar la programación de copiar/pegar, pero ilustraría el concepto de una manera más comprensible para un programador. – Suma

28

Simplemente puede invocar el método del caso de acción directa:

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

Puede quitar las llaves vacías. Ver http://tinybrain.de/1007469 –

+0

Este es mucho mejor y más simple: https://stackoverflow.com/a/5109301/540552 –

Cuestiones relacionadas