Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 如何从其他操作调用操作?(如果这是明智的话)_Java_Swing_Action_Actionlistener - Fatal编程技术网

Java 如何从其他操作调用操作?(如果这是明智的话)

Java 如何从其他操作调用操作?(如果这是明智的话),java,swing,action,actionlistener,Java,Swing,Action,Actionlistener,我打算将Swing应用程序从使用ActionListeners重构为Action类,因为我意识到我的很多菜单项也将在工具栏中使用 现在我有一个名为ImportExport的类,它处理底层模型的状态,然后显示相应的用户对话框ImportExport具有函数save()、saveAs()和open()。当用户单击“打开”菜单项时,操作侦听器调用Open(),Open()首先检查模型是否有更改,如果是这种情况,则显示一个对话框,询问用户是否要先保存。现在,如果用户单击“是”open()调用save()

我打算将Swing应用程序从使用ActionListeners重构为Action类,因为我意识到我的很多菜单项也将在工具栏中使用

现在我有一个名为
ImportExport
的类,它处理底层模型的状态,然后显示相应的用户对话框
ImportExport
具有函数
save()
saveAs()
open()
。当用户单击“打开”菜单项时,操作侦听器调用
Open()
Open()
首先检查模型是否有更改,如果是这种情况,则显示一个对话框,询问用户是否要先保存。现在,如果用户单击“是”
open()
调用
save()
,它将再次执行一些检查并显示用户对话框
save()
相当持久:退出此操作的唯一方法是成功保存或用户决定取消。我非常依赖
save()
提供的反馈,如果用户想要取消,我也会取消调用
open()
函数

我想将
ImportExport
类分为三个类(
OpenAction
SaveAction
&
SaveAsAction
),每个类对
AbstractAction
进行子类化,并最终摆脱
ImportExport
类。这就是我的问题所在:如果用户想在打开另一个模型之前保存模型,我如何告诉
SaveAction
执行?如果用户决定取消,我如何获得反馈


这是正确的方法吗?我不希望在save和open操作中有重复的代码,我已经在我的底层模型中尽可能多地添加了功能,但是用户对话框显然不合适,所以没有选择。
Action
是设计用来保存这种功能的,还是我应该保留我的
ImportExport
类,并简单地将所有操作调用委托给
ImportExport
中的相应函数。如何使用
操作

当涉及决策树时,我有时会添加“控制器”操作。OpenAction、SaveAction和SaveAsAction将成为此控制器操作的子类。控制器操作将确定模型的状态,并在适当的情况下请求用户提供更多信息,然后调用正确的子类。

我将创建一个
ImportExportController
类,具有以下方法:
打开、保存、另存为
。该控制器将了解业务逻辑

我的
Action
类不会包含很多业务逻辑。他们只会呼叫控制器

但这些操作将包含所有标签、图标、加速器。。。必须显示在
JButton
JMenuItem
等中

对我来说,
Actions
是面向GUI的类,用于方便(而且非常方便!),但没有专门用于处理业务逻辑的类