我将要使用的ActionListeners到Action类重构一个Swing应用程序,因为我意识到,我的很多菜单项会在工具栏被使用。

现在我有一类称为ImportExport其与下面的模型的状态涉及然后显示适当的用户对话。 ImportExport具有的功能save()saveAs()open()。当用户点击“打开”菜单项,动作监听电话open()open()首先检查模型的变更,如果是这样的话,如果他想先救显示一个对话框,询问用户。现在,如果用户点击“是” open()调用save()再次进行一些检查,并显示用户对话框。 save()很执着:要走出这个动作的唯一方法是无论是成功保存或用户决定他想要取消。我强烈地依赖于save()提供反馈,如果用户想取消我也取消调用open()功能。

我想给ImportExport类分成三类(OpenActionSaveActionSaveAsAction),他们每个人的继承AbstractAction并最终摆脱ImportExport类的。而这正是我的问题出现了:我怎么告诉SaveAction来执行,如果用户想要打开另外一个之前保存的模式呢?而如何如果用户决定取消我得到的反馈?

这甚至是正确的做法?我不喜欢在保存和打开动作已经重复的代码,我已经把尽可能多的功能可以为我的基础模型,但用户对话是obiously出来的地方有那么这是没有选择。当时Action在所有设计容纳这种功能还是要高度重视我只是把我的ImportExport,并简单的委托一切行动呼吁在ImportExport适当的功能。如何使用Actions

有帮助吗?

解决方案

我有时添加“控制器”的动作时,有涉及决策树。 OpenAction,SaveAction和SaveAsAction将继承该控制器动作。控制器动作将确定模型的状态,并请求来自所述用户如果合适的话,然后调用正确的子类的详细信息。

其他提示

我将创建一个ImportExportController类,具有以下方法:open, save, saveAs。该控制器将知道的业务逻辑。

Action类不含有大量的业务逻辑。他们将只调用控制器。

不过,这些行动将包括所有的标签,图标,加速器...这必须显示在JButtonJMenuItem等。

对于我来说,Actions是GUI导向类,用于方便(和他们都非常方便!),但无类专用于处理业务逻辑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top