Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT-关于检索结果/检测中止用户输入的对话框最佳实践的问题_Java_Data Binding_Swt_Jface - Fatal编程技术网

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

Java SWT-关于检索结果/检测中止用户输入的对话框最佳实践的问题,java,data-binding,swt,jface,Java,Data Binding,Swt,Jface,我想用SWT/JFace作为UI库构建一个数据库应用程序。自从我第一次使用Window Builder Eclipse插件时偶然发现JFace以来,我已经习惯于手工编写SWT代码,并想深入研究它的数据绑定功能。 目前我的工作集中在“添加记录”对话框上,我对最佳实践感兴趣。我将一个空的模型对象绑定到文本字段,一旦用户输入,模型对象属性就会更新。 此外,我更改了open()方法的方法签名,以便在对话框处理后返回模型对象。截断的: public class AddRecordDialog extend

我想用SWT/JFace作为UI库构建一个数据库应用程序。自从我第一次使用Window Builder Eclipse插件时偶然发现JFace以来,我已经习惯于手工编写SWT代码,并想深入研究它的数据绑定功能。
目前我的工作集中在“添加记录”对话框上,我对最佳实践感兴趣。我将一个空的模型对象绑定到文本字段,一旦用户输入,模型对象属性就会更新。
此外,我更改了
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
    和改变cancel按钮的选择侦听器上的变量

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

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

你可能会想,哦,他担心的是一些小问题,而不是真正的编程问题,但由于这是我的第一个应用程序,我希望严格遵守MVC和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();
  ...
}