Java EventListeners和自定义gui组件

Java EventListeners和自定义gui组件,java,swing,user-interface,actionlistener,Java,Swing,User Interface,Actionlistener,我有一个SWING GUI类,它为显示的一部分实例化一个自定义JPanel。这个自定义类有按钮和文本字段等。拥有自定义JPanel的My GUI类还有一个控制器类,用于处理对我的数据模型的修改。如何将操作从自定义面板传递给它的所有者(我的gui类)以处理事件 我曾经想过,也许我可以在gui中向自定义面板的构造函数添加对控制器类的引用,这样我就可以将它设置为按钮上的actionListener。这种做法可取吗?有更好的方法吗?您的视图代码(您的自定义JPanel)应该有一个控制器字段(或其他获取控

我有一个SWING GUI类,它为显示的一部分实例化一个自定义JPanel。这个自定义类有按钮和文本字段等。拥有自定义JPanel的My GUI类还有一个控制器类,用于处理对我的数据模型的修改。如何将操作从自定义面板传递给它的所有者(我的gui类)以处理事件


我曾经想过,也许我可以在gui中向自定义面板的构造函数添加对控制器类的引用,这样我就可以将它设置为按钮上的actionListener。这种做法可取吗?有更好的方法吗?

您的
视图
代码(您的自定义
JPanel
)应该有一个
控制器
字段(或其他获取控制器类的方法)。这样,当您收到用户的操作(例如,鼠标单击按钮)时,您可以调用
controller.doTheAppropriateAction()
。要么在at构造中传递
控制器
,要么在其上使用Javabean setter模式,并在启动逻辑(听起来像“GUI类”)中的构造之后设置它。我更喜欢Javabean模式,因为GUI编辑器不需要参数构造函数

您应该将您的
视图
注册为相关
控制器
(或
模型
)类的
侦听器
,以便在任何更改时自动通知您-这样您就可以
重新绘制()
您的
组件
(或执行更高级的操作)。这将涉及到设置您自己的
界面
(供
视图
实现)和
控制器
(或
模型
)中的侦听器处理逻辑

从后者中取出样板


akf
提供了另一种选择:将您的
控制器注册为
ActionListener
,以查看
代码。这种方法的优点是您的
视图
代码不会绑定到特定的
控制器
——但缺点是
控制器
将绑定到您的
视图
代码。我倾向于为不同的UI实现(例如Swing、GWT、JSP)重复使用
Controller
代码,因此我的
Controller
s和
Model
s从不依赖于任何特定的
视图或原子用户操作。

您可以将对父GUI的引用作为
ActionListener
传递给自定义面板。然后,您的自定义面板可以注册您的
ActionListener
——用所有按钮实现父类,等等

然后,您的父类将收到关于每个操作的通知