gpt4 book ai didi

java - JComponent 和 ComponentUI 委托(delegate)之间的绑定(bind)事件

转载 作者:行者123 更新时间:2023-11-30 09:35:15 25 4
gpt4 key购买 nike

我已经开始尝试创建普通的 MVC Swing 组件。我对 M 和 C 没有问题,但是 V 抛给我一个我通常无法解决的问题。问题是:Controller 是组件(例如 MyComponent)的主类,它扩展了 JComponent。 View 是从 ComponentUI 类扩展而来的 ui 委托(delegate) (MyCompanentUI)。委托(delegate)所做的就是在 MyCompanent 中添加 JTextField 并提供 MyComponentModel 和该字段之间的数据绑定(bind)。它工作得很好。但是如何将事件从 JTextField 绑定(bind)到 MyComponent?如果用户想要处理一些事件,他会向 MyComponent 添加监听器,但所有真实事件(鼠标、焦点、按键等)都会被 JTextField 拦截,用户并不真正了解这些事件。那么除了捕获事件并将其手动转换为原始组件之外,有什么正常的方法可以做到这一点吗?还是有另一种创建委托(delegate)的方法,而我真的做错了?

更新:

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

最佳答案

如果您正在编写自己的 JComponent 子类并希望允许自定义 UI 委托(delegate),我将从 Kirill Grouchnikov 的 How to Write a Custom Swing Component 着手。 .

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

关于java - JComponent 和 ComponentUI 委托(delegate)之间的绑定(bind)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com