Как интегрировать JMenuBar в архитектуру MVC в Java? - PullRequest
6 голосов
/ 11 мая 2011

Я использую это руководство для создания приложения с использованием архитектуры MVC: http://www.oracle.com/technetwork/articles/javase/index-142890.html. Но я не уверен, как или где мне разместить код для сборки и добавить в него actionListener JMenuBar.

Кроме того, в книге Кей Хорстманна «Объектно-ориентированный дизайн и шаблоны» сказано: « Контроллер может обрабатывать события мыши и клавиатуры из оконной системы или содержать элементы пользовательского интерфейса, такие как кнопки и меню. «Должен ли я следовать этому совету, если да, как мне его реализовать? Как добавить его в JFrame моего основного класса?

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Как указано в Как использовать действия , Action - это удобный способ инкапсулировать это. Кроме того, Action "может использоваться для отделения функциональности и состояния от компонента."

Добавление: в этом очень простом примере модель представляет собой File, представляющий каталог в файловой системе, а представление представляет собой JLabel, который прослушивает actionPerformed(). Инкапсуляция, предоставляемая Action, гарантирует, что каждый элемент меню и кнопка панели инструментов дают одинаковый результат. Этот подход является символом разделяемой модели Swing .

0 голосов
/ 11 мая 2011

Я всегда создавал панели меню следующим образом.

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
}

тогда в основном кадре вы просто добавляете к нему меню JFrame myframe;

myFrame.setMenuBar(new MyMenuBar())

Некоторые из этого синтаксиса могут быть неправильными, я не писал меню в течение некоторого времени. Вы можете расширить его, добавив фабричные классы, которые возвращают ваши действия, чтобы их можно было многократно использовать, или использовали некоторую инфраструктуру DI, чтобы сделать то же самое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...