java - SWT - 关于检索结果/检测中止的用户输入的对话框最佳实践的问题

标签 java data-binding swt jface

我想构建一个使用 SWT/JFace 作为 UI 库的数据库应用程序。我已经习惯了手动编写 SWT 代码,并希望深入研究 JFace 的数据绑定(bind),因为我第一次使用 Window Builder Eclipse 插件时偶然发现了它。
目前我的工作重点是“添加记录”对话框,我对最佳实践感兴趣。我将一个空模型对象绑定(bind)到文本字段,并且一旦用户进行输入,模型对象属性就会更新。
此外,我更改了 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;
    }
}

但是,如果用户取消输入(通过单击“取消”按钮或关闭对话框),这种处理结果对象的方式只会为我提供具有来自不带参数的空默认构造函数的默认属性的模型对象。
这就提出了如何确定用户采取了什么操作的最佳实践问题。我想到的一些解决方案:

  • 是否应该引入一个额外的标志?喜欢像 cancelClicked = false 这样初始化的额外 boolean 值并更改取消按钮的选择监听器上的变量吗?

  • 是否应该像在 MessageBox 类中一样为按钮指定 ID,并在打开对话框的类中引入 switch 语句?必须引入添加一个额外的方法来返回最终有效的模型对象。

  • 是否有其他方法可以通知对话框调用者已取消的输入?

您可能会想,哦,他担心的是小问题而不是真正的编程问题,但由于这是我的第一个应用程序,我想在 Java/SWT 环境中严格遵守 MVC 和最佳实践,所以我确实关心。

预先感谢您阅读这个相对较长的问题;)

最佳答案

如果你真的想坚持使用 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();
  ...
}

关于java - SWT - 关于检索结果/检测中止的用户输入的对话框最佳实践的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311395/

相关文章:

java - 如何在 TreeViewer 中的第二列中展开列

java - 使用 mandrill 发送邮件时附件的文件大小限制

java - 扩展到 fragment 或 Activity

mysqli_stmt_bind_param 正在我的中插入零

xaml - 数据绑定(bind)到 ComboBox c++/cx XAML Metro 应用程序时 SelectedValue、SelectedIndex 的问题

java - Vista 上的 SWT 浏览器问题

java - 在 android 布局中使用与分辨率无关的字体

java - 无法找到或加载主类、环境变量

java - MVVM绑定(bind),保存前获取以前的表单值

swt - headless 模式下的 GC#copyArea