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