EventListeners和自定义gui组件



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

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

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

你应该将你的View注册为相关Controller(或Model)类的Listener,这样当任何事情发生变化时,你就会自动被告知——这样你就可以repaint()你的Component(或做一些更高级的事情)。这将涉及在Controller(或Model)中设置您自己的interface(供View实现)和侦听器处理逻辑。

龙目PG从后者身上取下样板。

akf提供了一个替代方案:将Controller注册为View代码的ActionListener。这种方法的优点是View代码不会绑定到特定的Controller,但缺点是Controller将绑定到View代码。我倾向于为不同的UI实现(例如Swing、GWT、JSP)重用Controller代码,因此我的ControllerModel从不依赖于任何特定的View或原子用户操作。

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

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

最新更新