SWT - Вопрос о лучшей практике Dialog для получения результата / обнаружения прерванного ввода пользователя - PullRequest
1 голос
/ 05 сентября 2011

Я хочу создать приложение базы данных с SWT / JFace в качестве библиотеки пользовательского интерфейса. Я привык кодировать SWT вручную и хотел углубиться в связывание данных с JFace, так как наткнулся на него в первый раз, когда использовал плагин Window Builder Eclipse.
В настоящее время моя работа сосредоточена на диалоге «Добавить запись», и мне интересны лучшие практики. Я связал пустой объект модели с текстовыми полями, и свойства объекта модели были обновлены, как только пользователь введет данные.
Кроме того, я изменил сигнатуру метода open(), чтобы он возвращал объект модели после удаления из диалогового окна. Усеченный:

public class AddRecordDialog extends Dialog {
    private MyItem item = new MyItem();

    ...

    public MyItem open() {
        createContents();
        shell.open();
        shell.layout();
        Display display = getParent().getDisplay();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        return item;
    }
}

Однако, если пользователь отменяет свой ввод (нажатием кнопки «Отмена» или закрытием диалога), этот способ обработки результирующего объекта дает мне только объект модели с атрибутами по умолчанию из пустого конструктора по умолчанию без параметров .
Это поднимает вопрос о наилучшей практике определения того, какие действия предпринял пользователь. Несколько решений на мой взгляд:

  • Должен ли быть введен дополнительный флаг? Как дополнительное значение boolean, например, инициализированное, например cancelClicked = false и изменение переменной на слушателе выбора кнопки отмены?

  • Должны ли кнопки иметь идентификаторы, как в классе MessageBox, и вводить в классе выражение switch, которое вызывает диалог? Необходимо добавить дополнительный метод для возврата в конечном итоге допустимого объекта модели.

  • Может быть, есть какой-то другой способ сообщить вызывающему диалогу об отмене ввода?

Вы можете подумать, о, он беспокоится о крошечных проблемах, а не о реальных проблемах программирования, но так как это мое первое приложение, где я хочу строго придерживаться MVC и лучших практик в среде Java / SWT, которые я делаю уход.

Заранее спасибо за чтение этого относительно лонг вопроса;)

1 Ответ

1 голос
/ 06 сентября 2011

Если вы действительно хотите придерживаться MVC, я предлагаю немного изменить модель:)

class MyItemBuilder {
  private bool isCanceled = false;
  private MyItem item;
  // includes getters/setters of MyItem, which delegate to item

  public bool cancel() {
    isCanceled = true;
  }

  public MyItem build() {
    if (isCanceled) 
      return null;
    else
      return item;
  }
}

public class AddRecordDialog extends Dialog {
  private MyItemBuilder builder = new MyItemBuilder();
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...