GWT-EXT - каков наилучший способ добавления виджетов на определенную панель контента после события?

StackOverflow https://stackoverflow.com/questions/111854

  •  02-07-2019
  •  | 
  •  

Вопрос

первый пост не причиняй мне вреда :)

Я использую BorderLayout с обычными панелями "Север", "Запад", "Центр", "Юг".На Запад ContentPanel, У меня есть Tree.Если событие (OnClick) возникает, когда я хочу, чтобы определенное диалоговое окно отображалось на Центр ContentPanel.

Каков наилучший способ для меня сделать это?В настоящее время я использую функцию под названием returnPanel() это возвращает центр ContentPanel.В обработчике событий я вызываю эту функцию (MainWindow.returnPanel().add(myDialog)).

Это было полезно?

Решение

То, как вы это делаете, интуитивно понятно и работает, но начнет вызывать ад, когда приложение будет расти, потому что разные части приложения сильно связаны.Решениями этой проблемы являются Шаблон проектирования MVC и тот шаблон проектирования наблюдателя.

В идеале, используя шаблон MVC, вы не хотите, чтобы какой-либо виджет "знал" о каком-либо другом виджете.Существует единственный класс, который знает все виджеты, и это Контроллер.Всякий раз, когда одному виджету требуется отправить сообщение / сигнал другому виджету, он сообщает об этом классу контроллера, который соответствующим образом передает сообщение соответствующему виджету.Таким образом, два виджета разделены, и один может изменяться, не нарушая работу другого.Возможно, вы захотите использовать enum для перечисления всех возможных действий, на которые контроллер должен реагировать.

Если ваш виджет должен вызывать только контроллер при возникновении события, вы можете просто вызвать для него точно названный (статический) метод и покончить с этим.Однако, как только несколько других классов должны быть проинформированы о событии, вам лучше использовать шаблон Observer, который позволяет вам сигнализировать нескольким другим классам, не меняя свой класс.Он просто вызывает notifyPObservers() в EventHandler, и все.Сколько там слушателей и к какому типу они относятся, не имеет значения.Таким образом, вы также отделяете класс от его слушателей.Даже если прослушивает только Контроллер, может быть целесообразно использовать шаблон, поскольку он четко отделяет код обратного вызова от другого кода в классах.

Кстати, это не имеет ничего общего ни с GWT, ни даже с Java в частности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top