现在,当我有一个包含许多JComponents的表单时,主要是JTextFields,JTextAreas,JComboboxes,JCheckBoxes和JButtons,并希望控制它们的行为,例如在释放某个键后焦点的更改,我会执行以下操作:
我将所有组件放在JComponent []中并循环遍历它,添加适当的侦听器。当一个事件由所述监听器注册时,我用“instanceof”检查什么样的JComponent发起事件并分配适当的反应。
我使用此方法例如通过表单循环VK_ENTER,或者在DocumentListener触发后循环到“firePropertyChange(..)”,或者添加UndoRedoListeners等等。
我的问题:是否有更好的方法可以做到这一点,如果有,你能向我解释一下这些好处吗?
答案 0 :(得分:1)
但我的问题是指全部放弃的一般做法 数组中的JComponents并为每个侦听器循环遍历它们 每一个被解雇的事件。它工作得很好,但感觉有点 “不经济”,所以我想知道是否推荐练习,或者是否 有更好的方法。
如果我有类型/实例特定的行为,我通常会为每个类型/实例编写一个自定义侦听器(通常作为匿名类),以便我可以避免instanceof和其他其他检查。
答案 1 :(得分:1)
您需要自定义焦点传输系统。
查看How to Use the Focus Subsystem,特别是Customizing Focus Traversal