我已经开始尝试创建普通的MVC Swing组件。我对M和C没问题,但是V向我抛出了一个我通常无法解决的问题。问题是:控制器是组件的主类(例如MyComponent),并且它扩展了JComponent。视图是从ComponentUI类扩展的ui委托(MyCompanentUI)。委托所做的只是在MyCompanent中添加JTextField并提供MyComponentModel与该字段之间的数据绑定。它工作正常。但是,如何将事件从JTextField绑定到MyComponent?如果用户想要处理某些事件,则可以将侦听器添加到MyComponent,但是将JTextField截获的所有真实事件(鼠标,焦点,键等)添加,用户并不真正知道这些事件。那么有什么正常的方法可以做到这一点,除了捕获事件并手动将其转换为原始组件?还是有另一种创建委托的方式,而我只是做错了?
UPD:
感谢您的回复,垃圾桶。但是我的想法有所不同。我说的是“事件继承”之类的东西,例如“ inheritsPopupMenu”方法。因此,键,焦点或鼠标事件发生在组件上时,它本身不会对其进行处理,而是将其直接传递给父组件。但是这似乎是不可能的,因为我已经注意到JSpinner存在完全相同的问题- 您几乎无法从此组件获得任何事件通知。
如果您正在编写自己的JComponent子类,并且希望允许自定义UI委托,那么我将从Kirill Grouchnikov的“ 如何编写自定义Swing组件”开始 。
JComponent
如果您正在编写一个包含现有JComponent子类的组合,例如JTextField,请参见 如何利用如何使用键绑定中Action描述的现有实例。是一个例子。您可以从组件的源极(S),或使用这种学习行为的名字@ camickr的文章中所看到的方便实用 按键绑定 。 __ScrollAction __
JTextField
Action
ScrollAction