2011-05-11 23 views
6

Estoy usando este tutorial para crear una aplicación usando la arquitectura MVC: http://www.oracle.com/technetwork/articles/javase/index-142890.html. Pero no estoy seguro de cómo o dónde debería poner el código para compilar y agregar ActionListener de un JMenuBar dentro de él.¿Cómo integrar un JMenuBar en una arquitectura MVC en Java?

Por otra parte, el libro Diseño Orientado a Objetos & Patterns de Cay Horstmann decir "El controlador puede procesar eventos de ratón y teclado desde el sistema de ventanas, o pueden contener elementos de la interfaz de usuario, tales como botones y menús." ¿Debo siga este consejo, si es así, ¿cómo debo implementarlo? ¿Cómo agregarlo al JFrame que está en mi clase principal?

+0

No es una respuesta, pero prefiero sugerir que eche un vistazo a la arquitectura basada en PM, en lugar de MVC. Karsten Lentzsch tiene muy buenas presentaciones al respecto (lo siento, no conozco el enlace ahora) y también la biblioteca de enlace de código abierto JGoodies para ayudar a implementarlo. – jfpoilpret

+0

Tank you @jfpoilpret, no estaba al tanto de esta arquitectura, iré a verla. – JPB

Respuesta

3

Como se sugiere en How to Use Actions, Action es una forma conveniente de encapsular esto. Además, Action "se puede usar para separar la funcionalidad y el estado de un componente."

Adición: En este example muy simple, el modelo es una representación de File un directorio en un sistema de archivos, y la vista es un JLabel que detecta el actionPerformed(). La encapsulación brindada por Action garantiza que cada elemento del menú y botón de la barra de herramientas produzcan el mismo resultado. El enfoque es emblemático de Swing's separable model architecture.

+0

+1 para java.swing.Action – mKorbel

+0

@mKorbel: ¡Gracias! La conveniencia es convincente, pero aún necesito abordar el aspecto de la arquitectura. – trashgod

0

Siempre he creado MenuBars de la siguiente manera.

class MyMenuBar extends JMenuBar { 
    add(new FileItem()) 
} 

class FileItem extends MenuItem { 
    addMenuItem(new ExitAction()) 
} 

class ExitAction extends AbstractAction { 
    //define the action, tooltip and name of here 
} 

entonces en su estructura principal que acaba de añadir a la barra de menús que JFrame MyFrame;

myFrame.setMenuBar(new MyMenuBar()) 

Algunos de esta sintaxis pueden ser incorrectas, no han escrito una barra de menú por un tiempo. Puede ampliarlo teniendo clases de fábrica que devuelvan sus acciones para que puedan ser reutilizables o use algún marco DI para hacer lo mismo

Cuestiones relacionadas