2012-05-08 8 views
7

Estoy tratando de separar la función del estado en mi aplicación GUI mediante el uso de objetos Action. He tenido éxito en el uso de estos para crear elementos de menú y botones que tienen la misma funcionalidad.AbstractAction como WindowListener

Mi problema es este: quiero tener la misma acción para el elemento 'salir' de mi menú y el botón para cerrar el marco.

Actualmente he sido capaz de resolverlo mediante la adición de la siguiente WindowListener al marco:

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

¿No hay una manera más sencilla de hacer esto más sencillo?

Respuesta

6

El reenvío de eventos es útil, pero también puede usar dispatchEvent(), como se muestra en here.

Adición: Más ejemplos que usan Action se muestran a continuación.

  • LinePanel que conecta los botones y las teclas.
  • ScrollAction que aprovecha las acciones Swing existentes.
  • KeyPadPanel que ilustra las acciones de reenvío.
  • GraphPanel que muestra las acciones del editor gráfico en una barra de herramientas.
+0

Un enfoque relacionado es invocar el método 'doClick()' de un botón, como se muestra [aquí] (http://stackoverflow.com/a/5797965/230513). – trashgod

+0

Esto es algo nuevo para mí, y bastante interesante :-) –

+0

Por lo tanto, si lo entiendo correctamente, el uso de dispatchEvent() es algo opuesto a lo que estoy haciendo: mantener el código en el WindowListener en lugar de en un acción, y hacer que la acción envíe un evento allí en lugar de hacer que el WindowListener reenvíe su evento a la acción? Interesante ... – FinalArt2005

Cuestiones relacionadas