我正在尝试使用MVC设计。

在模型中,我想要一个这样的方法

public boolean changeSomeData(...){
    boolean b;
    //create a dialog with an OK button
    return b;
}


如果实际进行更改,我希望该方法返回TRUE。更改是在“确定”按钮的actionPerformed方法内部完成的。

我的问题是我不能写b = true;在OK按钮的actionPerform内部,因为我必须将b声明为final才能在actionPerformed()中使用它。

我所做的就是创建一个类

private class MyBoolean {
    boolean b;
}


然后

public boolean changeSomeData(...){
    MyBoolean myBoolean;
    //create a dialog with an OK button
    actionPerformed(){
        //make changes in the data
        myBoolean.b=true;
    }
    boolean b = myBoolean.b;
    return b;
}


但是我对此解决方案并不满意,我想知道我做的是否正确以及是否有更好的解决方案。
如果不进行更改,是否应该抛出异常? (例如,如果用户单击“取消”而不是“确定”)

最佳答案

在模型中,我想要一个这样的方法... //创建一个带有“确定”按钮的对话框


我会说这已经是一个缺陷,因为该模型不应直接对视图执行任何操作。

更好的方法是打开对话框(使用控制器),为“ OK”(因此为actionPerformed)的ActionEvent注册控制器,然后对该方法进行任何更改。

编辑:

您可能需要考虑以下粗略方法:

视图将自己或关联的类注册为侦听器。无论何时更改模型,它都会触发事件以通知更改的视图。

控制器在视图上注册自己,并在视图更改时收到通知。如果用户更改数据,则控制器可能会打开对话框,并且仅提交用户信号“ OK”的更改。因此,该模型无需检查自己是否需要更改数据。这实际上是控制器的任务,如果控制器将更改传递给模型,则应将其应用。

关于java - 遍历actionPerformed()返回void,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5460224/

10-10 02:04