我正在尝试使用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/