Я пытаюсь запрограммировать приложение поворота и узнать что-то о шаблоне mvc. Также я хочу, чтобы мой Swing Code был чистым, поэтому я разделил свой графический интерфейс в разных классах. Часть этой структуры класса выглядит следующим образом:swing и mvc - где разместить слушателя
//all classes extending BasicGuiElement
-EntireContentElement has:
---ControlElement has:
------MainMenuElement
MainMenuElement содержит MainMenuBar, меню, а в качестве MenuItems. Теперь различным функциям MenuItems нужны разные ActionListeners.
И вот моя проблема: Откуда должен появиться этот ActionListener? Должен ли я создать EntireControlElement в представлении, к которому я передаю HashMap, а также передать эту карту через все элементы MainMenuElement? И если у меня много классов, которым все нужны кучу слушателей, я бы передал список карт слушателей? Это был бы действительно уродливый код, не так ли?
Другим решением было бы передать модель как ModelInterface для представления, а методы вызова модели из прослушивателей действий, которые будут созданы в классах представлений ... было бы более приятным подходом?
Спасибо!
модель и вид, вообще говоря, не должны знать друг о друге и должны быть преодолены с помощью контроллера, это означает, что контроллер должен быть выступая в качестве наблюдателя на эту точку зрения и реагируя на соответствующие события. Одна вещь, которую вы можете сделать, это определить контракт между представлением и контроллером, который описывает действия, которые может выполнять представление (или даже общее «событие меню»), к которому контроллер может реагировать. Вы должны подключить 'ActionListener' к вашим компонентам в представлении напрямую, а затем запустить соответствующие события обратно в контроллер. – MadProgrammer
Вид продемонстрировал идею [здесь] (http://stackoverflow.com/questions/26517856/java-swing-where-do-actionlisteners-belong-according-to-mvc-pattern/26518274#26518274) – MadProgrammer