JavaFX将事件处理程序列表添加到画布

JavaFX将事件处理程序列表添加到画布,java,javafx,Java,Javafx,我需要帮助创建将事件处理程序从列表添加到画布的模式。我有画布控制器,包括画布。我有ToolController,其中包括按钮,每个按钮都有特定事件处理程序的列表。单击这些按钮后,列表将发送到CanvasController,并将侦听器添加或删除的事件更改为Canvas。你认为这种方法好吗 在第一次阅读时,我认为这两个控制器是超级紧密耦合的。我想这是一种绘画应用。您的“画布”可以有自己的模型来存储画布当前状态的可序列化表示,另一个控制器可以设置模型的属性(绘图模式、文本模式…),然后在这些属性发生

我需要帮助创建将事件处理程序从列表添加到画布的模式。我有画布控制器,包括画布。我有ToolController,其中包括按钮,每个按钮都有特定事件处理程序的列表。单击这些按钮后,列表将发送到CanvasController,并将侦听器添加或删除的事件更改为Canvas。你认为这种方法好吗

在第一次阅读时,我认为这两个控制器是超级紧密耦合的。我想这是一种绘画应用。您的“画布”可以有自己的模型来存储画布当前状态的可序列化表示,另一个控制器可以设置模型的属性(绘图模式、文本模式…),然后在这些属性发生变化时,模型的控制器可以决定GUI类应该发生什么。@Pornosaurus Nope。更好地使用策略模式。这样,您就可以在一个单独的类中获得每个工具的行为,并且不需要交换事件处理程序-您只需要将其委托给策略…@fabian,非常感谢。我认为我使用了这个模式,但不正确。我有一个
抽象类工具按钮
使用这个方法
抽象列表getEvents()
,每个按钮都扩展了抽象类,并且必须覆盖该方法以获取它们的重要事件。例如:
class ToolSelect
具有用于在画布上选择对象、滚动到在画布上缩放等的事件。。因此,在get方法中有如下内容:`List getEvents(){return List.addAll(单击,缩放,…);}。单击任何按钮后,列表将发送到CanvasController以保存到其列表中,然后添加到画布。@fabian,如果我理解的话,最好记住选择了哪个按钮,并且每个新创建的画布仅通过方法获取其事件?