4.5.1.3.1. AbstractFrame

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 , которые в диалоге отображаются посредством соответствующих кнопок.

    Для отображения стандартных кнопок типа OK, Cancel и других рекомендуется использовать объекты типа 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() - открыть указанную веб-страницу в браузере.