AbstractFrame
является корнем иерархии классов контроллеров. Рассмотрим его основные методы:
-
init()
- вызывается фреймворком после создания всего дерева компонентов, описанного XML-дескриптором, но до отображения экрана.В метод
init()
из вызывающего кода передается мэп параметров, которые могут быть использованы внутри контроллера. Эти параметры могут быть переданы как из кода контроллера вызывающего экрана (в методеopenWindow()
,openLookup()
илиopenEditor()
), так и установлены в файле регистрации экрановscreens.xml
.Метод
init()
следует имплементировать при необходимости инициализации компонентов экрана, например:@Inject private Table someTable; @Override public void init(Map<String, Object> params) { someTable.addGeneratedColumn("someColumn", new Table.ColumnGenerator<Colour>() { @Override public Component generateCell(Colour entity) { ... } }); }
-
getMessage()
,formatMessage()
- методы получения локализованных сообщений из пакета, заданного для экрана в XML-дескрипторе. Представляют собой просто короткие варианты вызова одноименных методов интерфейсаMessages
. -
getDialogParams()
- получить объектDialogParams
для установки параметров отображения диалоговых окон (высота, ширина и пр.). Значения, установленные в этом объекте, влияют на следующий экран, открываемый в режиме модального диалога (WindowManager.OpenType.DIALOG
). После отображения диалога они сбрасываются в значения по умолчанию.Таким образом, устанавливать значения в
DialogParams
необходимо непосредственно перед вызовом другого экрана в режиме диалога методамиopenWindow()
,openLookup()
,openEditor()
. Например:getDialogParams().setWidth(400); openEditor("sales$Customer.edit", customer, WindowManager.OpenType.DIALOG);
Если же сам текущий экран открывается в режиме модального диалога, то можно управлять параметрами его отображения, устанавливая параметры
DialogParams
в его методеinit()
. При этом установленные вinit()
параметры имеют приоритет над установленными в вызывающем коде. -
openFrame()
- загрузить фрейм по идентификатору, зарегистрированному вscreens.xml
, и, если в метод передан компонент-контейнер, отобразить его внутри контейнера. Возвращается контроллер фрейма. Например:@Inject private BoxLayout container; @Override public void init(Map<String, Object> params) { SomeFrame frame = openFrame(container, "someFrame"); frame.setHeight("100%"); frame.someInitMethod(); }
Контейнер не обязательно сразу передавать в метод
openFrame()
, вместо этого можно загрузить фрейм, а затем добавить его в нужный контейнер:@Inject private BoxLayout container; @Override public void init(Map<String, Object> params) { SomeFrame frame = openFrame(null, "someFrame"); frame.setHeight("100%"); frame.someInitMethod(); container.add(frame); }
-
openWindow()
,openLookup()
,openEditor()
- открыть соответственно простой экран, экран выбора или редактирования. Методы возвращают контроллер созданного экрана.Для выполнения действий после закрытия вызываемого экрана необходимо добавить слушатель типа
CloseListener
, например:CustomerEdit editor = openEditor("sales$Customer.edit", customer, WindowManager.OpenType.THIS_TAB); editor.addListener(new CloseListener() { @Override public void windowClosed(String actionId) { // do something } });
-
showMessageDialog()
- отобразить диалоговое окно с сообщением. -
showOptionDialog()
- отобразить диалоговое окно с сообщением и возможностью выбора пользователем некоторых действий. Действия задаются массивом объектов типаAction
, которые в диалоге отображаются посредством соответствующих кнопок.Для отображения стандартных кнопок типа
, и других рекомендуется использовать объекты типаDialogAction
, например:showOptionDialog("PLease confirm", "Are you sure?", MessageType.CONFIRMATION, new Action[] { new DialogAction(DialogAction.Type.YES) { @Override public void actionPerform(Component component) { // do something } }, new DialogAction(DialogAction.Type.NO); });
-
showNotification()
- отобразить всплывающее окно с сообщением. -
showWebPage()
- открыть указанную веб-страницу в браузере.