【发布时间】:2012-11-12 08:23:35
【问题描述】:
现在,当我有一个包含许多 JComponents 的表单时,主要是 JTextFields、JTextAreas、JComboboxes、JCheckBoxes 和 JButtons,并且想要控制它们的行为,例如释放某个键后焦点的变化,我会执行以下操作:
我将所有组件放在 JComponent[] 中并循环访问它,添加适当的侦听器。当所述侦听器注册事件时,我使用“instanceof”检查哪种 JComponent 触发了该事件并分配适当的反应。
我使用这种方法来循环使用 VK_ENTER 通过表单,或者在 DocumentListener 触发后到“firePropertyChange(..)”,或者添加 UndoRedoListeners 等等。
我的问题:有没有更好的方法来做到这一点,如果有,你能向我解释一下好处吗?
【问题讨论】:
-
如果
FocusManager不是答案,我不明白这个问题。 -
FocusManager 是一个很好的提示,但我的问题是指将所有 JComponents 放在一个数组中并为每个侦听器和每个触发事件循环遍历它们的一般做法。它工作得很好,但感觉有点“不经济”,所以我想知道是否推荐这样做,或者是否有更好的方法。
-
听起来你做的事情基本上是错的(从未有过这样的愿望/需要)退后一步,解释一下你想做什么实现(相对于描述感知解决方案的问题)
-
抱歉,我的问题似乎没有说清楚。普斯明白我在问什么,他的回答至少表明了这一点。我会再试一次:给定一个表单上可能有大量和多种 JComponent,我需要为许多不同的事件分配侦听器;注册事件后执行的操作通常取决于特定类型的 JComponent。目前,我所做的如上所述(循环通过 JComponent[],使用“instanceof”检查)。有没有更好的方法(可能是 Puce 的?)?