JComponent和ComponentUI委托之间的绑定事件

时间:2012-07-12 14:50:34

标签: java swing model-view-controller events

我已经开始尝试创建正常的MVC Swing组件。我对M和C没有任何问题,但V向我抛出了一个我通常无法解决的问题。 问题是:Controller是组件的主类(例如,MyComponent),它扩展了JComponent。 View是从ComponentUI类扩展的ui委托(MyCompanentUI)。委托所做的就是在MyCompanent中添加JTextField,并在MyComponentModel和该字段之间提供数据绑定。它工作得很好。但是我如何将事件从JTextField绑定到MyComponent? 如果用户想要处理某些事件,他会将侦听器添加到MyComponent,但是JTextField截获的所有真实事件(鼠标,焦点,键等),关于哪个用户并不真正知道。 那么有没有正常的方法来做到这一点,除了捕捉事件并用手将其翻译成原始组件?或者是否有另一种创建委托的方法,我只是真的做错了?

UPD:

感谢您的回复,trashgod。 但是我的想法有些不同。我在谈论类似“事件继承”的东西,就像“inheritsPopupMenu”方法一样。因此,键,焦点或鼠标事件发生在组件上,它不会自己处理它,而是直接将它传递给父组件。但这似乎是不可能的,因为我注意到JSpinner有完全相同的问题 - 你几乎无法从这个组件获得任何事件通知。

1 个答案:

答案 0 :(得分:2)

如果您正在编写自己的JComponent子类并希望允许自定义UI代理,我将从Kirill Grouchnikov的How to Write a Custom Swing Component开始。

如果您正在撰写包含现有JComponent子类的组合,例如JTextField,请查看您是否可以利用How to Use Key Bindings中描述的现有Action个实例。 ScrollAction就是一个例子。您可以从组件的来源或使用文章@camickr's中所见的Key Bindings便捷实用程序中了解此类操作的名称。