Nic*_*zen 6 java user-interface swing actionlistener
我有一个SWING GUI类,它为显示的一部分实例化一个自定义JPanel.这个自定义类有按钮和文本字段等.我拥有自定义JPanel的GUI类还有一个控制器类,用于处理我的数据模型的修改.如何将操作从自定义面板传递给它的所有者(我的gui类)来处理事件?
我想到也许我可以在自定义面板的构造函数中添加对gui中我的控制器类的引用,这样我就可以将它设置为我的按钮上的actionListener.这种方法是否可取?有更好的方法吗?
您的View代码(您的自定义JPanel)应该有一个Controller字段(或获取控制器类的其他方式)。这样,当您收到用户的操作(例如鼠标单击按钮)时,您就可以进行呼叫controller.doTheAppropriateAction()。要么在构造时传入Controller,要么在其上使用 Javabean setter 模式,并在启动逻辑中构造后立即设置它(听起来像“GUI 类”)。我更喜欢 Javabean 模式,因为 GUI 编辑器需要无参数构造函数。
你应该将你的Viewa注册Listener到相关的Controller(或Model)类,这样当任何事情发生变化时你都会自动被告知 - 这样你就可以repaint()你的Components (或做一些更高级的事情)。这将涉及在(或)中设置您自己的interface(用于实现)和侦听器处理逻辑。ViewControllerModel
Lombok PG借鉴了后者的样板。
akf给出了另一种选择:将您的代码注册为Controlleran 。这种方法的优点是您的代码不会与特定的代码绑定,但缺点是您的代码将与您的代码绑定。我倾向于为不同的 UI 实现(例如 Swing、GWT、JSP)重复使用代码,因此我的s 和s 从不依赖于任何特定或原子用户操作。ActionListenerViewViewControllerControllerViewControllerControllerModelView