我已经开始尝试创建普通的 MVC Swing 组件。我对 M 和 C 没有任何问题,但是 V 向我抛出了一个我通常无法解决的问题。问题是:Controller是组件的主类(例如MyComponent),它扩展了JComponent。View 是从 ComponentUI 类扩展的 ui 委托 (MyCompanentUI)。委托所做的只是在 MyCompanent 中添加 JTextField 并在 MyComponentModel 和该字段之间提供数据绑定。它工作得很好。但是如何将事件从 JTextField 绑定到 MyComponent?如果用户想要处理一些事件,他会向 MyComponent 添加侦听器,但所有真实事件(鼠标、焦点、键等)都会被 JTextField 拦截,而用户并不真正知道。那么有什么正常的方法可以做到这一点,除了捕获事件并手动将其转换为原始组件?还是有另一种方法来创建委托,而我真的做错了?
升级版:
谢谢你的回复,垃圾神。但我心里有一些不同的东西。我说的是“事件继承”之类的东西,例如“inheritsPopupMenu”方法。这样组件发生的按键、焦点或鼠标事件本身就不会处理它,而是直接将其传递给父组件。但这似乎是不可能的,因为我注意到 JSpinner 有完全相同的问题——你几乎无法从这个组件获得任何事件通知。