Лучшая практика для компонентов GUI ActionListener? - PullRequest
0 голосов
/ 22 июня 2011

Я сделал большое приложение на основе графического интерфейса, и теперь у меня есть много Action вещей ... У меня есть другие Listeneres, как ActionListener, KeyAdapters, ... Все должно работать с резьбой, так чтомой графический интерфейс не зависает при длительных операциях.Поэтому я использую SwingWorker в каждом ActionListener ... В настоящее время он работает так: у меня есть JComponents, привязанный к одному ActionListener.В этом Listener я решаю, что делать, основываясь на actionCommand().Я вызываю метод, который содержит мои SwingWorker и Action, которые должны быть выполнены.

Мне больше не нравится эта концепция, потому что мой класс становится все длиннее и длиннее, и у меня нет обзорався функциональность.Поэтому я решил сделать это по-другому ... Я думал, что Factory Methods будет отличной вещью, но вот моя проблема с ними: мне иногда нужны данные из моего графического интерфейса, например: при нажатии JButton x, что находится в JTextField у и так далее ... так что лучше для этого?Должен ли я просто дать моей фабрике экземпляр моего полного графического интерфейса?Или ArrayList из Components?Другая проблема заключается в том, что нужно изменить значения из моего графического интерфейса, например: нажмите кнопку x, а затем отфильтруйте JTable ... как мне это сделать?делать это как this = myFactory.process(this); не правда ли то, что я хочу ...

1 Ответ

2 голосов
/ 23 июня 2011

Посмотрите на JGoodies Binding : в нем подчеркивается использование PM ( PresentationModel ), где хранится все состояние графического интерфейса пользователя (и привязано к фактическим компонентам графического интерфейса пользователя).

Каждое Представление имеет связанный PM, который устанавливает связь с моделью домена. ПМ может жить без просмотра (но обратное неверно).

PM не должен иметь никаких зависимостей, связанных с GUI (так что он может тестироваться модулем без GUI), следовательно, нет ссылки на JTextField, JButton ...

Однако PM обычно включает Action s, которые прикреплены к кнопкам из View . Действия не являются фактическими компонентами графического интерфейса (хотя они принадлежат пакету javax.swing.

Я сказал "нормально", потому что некоторым действиям может потребоваться отобразить окно сообщения, открыть новое окно ... Этот тип действий затем следует поместить в другой класс. Обратите внимание, что Карстен Ленцш (автор JGoodies) не говорит об этом случае в своих презентациях (это мой собственный способ разобраться с этим делом).

...