代码之家  ›  专栏  ›  技术社区  ›  sebastiangeiger

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

  •  1
  • sebastiangeiger  · 技术社区  · 15 年前

    我将重构一个Swing应用程序,从使用ActionListeners到操作类,因为我意识到我的许多菜单项也将在工具栏中使用。

    现在我有个班级叫 ImportExport 它处理基础模型的状态,然后显示适当的用户对话框。 进出口 具有功能 save() , saveAs() open() . 当用户单击“打开”菜单项时,操作侦听器将调用 打开() , 打开() 首先检查模型是否有更改,如果是这样,将显示一个对话框,询问用户是否要先保存。现在,如果用户单击“是” 打开() 电话 保存() 它再次执行一些检查并显示用户对话框。 保存() 非常持久:退出此操作的唯一方法是成功保存或用户决定要取消。我强烈依赖于以下反馈: 保存() 提供,如果用户想要取消,我也会取消呼叫 打开() 功能。

    我想把 进出口 分成三个班( OpenAction , SaveAction 和; SaveAsAction ,每个子类 AbstractAction 最终摆脱了 进出口 类。这就是我的问题所在:我该如何告诉 拯救行动 如果用户想在打开另一个模型之前保存模型,是否执行?如果用户决定取消,我如何获得反馈?

    这是正确的方法吗?我不喜欢在“保存并打开”操作中使用重复的代码,而且我已经尽可能多地将功能放到了底层模型中,但是用户对话框显然不在那里,所以这是没有选择的。是 Action 完全是为了保持这种功能而设计的,或者说我只是保留了我的 进出口 类并简单地将所有操作调用委托给 进出口 . 你如何使用 Actions ?

    2 回复  |  直到 15 年前
        1
  •  2
  •   willcodejavaforfood    15 年前

    当涉及到决策树时,我有时会添加一个“控制器”操作。openaction、saveaction和saveasaction将子类化此控制器操作。控制器操作将确定模型的状态,并在适当时向用户请求更多信息,然后调用正确的子类。

        2
  •  1
  •   Laurent K    15 年前

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

    我的 Action 类不会包含很多业务逻辑。他们只会打电话给管制员。

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

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