Я хочу создать приложение базы данных с 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, которые я делаю уход.
Заранее спасибо за чтение этого относительно лонг вопроса;)