我有一个包含JComboBoxes
的表,并希望为每个PropertyChangeListener
添加JComboBox
,因为某些选择的ComboBox必须更改其他JComboBoxes
的可选项。
我无法手动添加所有这些侦听器,因为它们非常多。
我正在使用数组初始化ComboBoxes,因此我在创建JComboBox
时已尝试添加侦听器:
comboBox[i].addPropertyChangeListener(new PropertyChangeListener()
但它没有用,因为字段变量i
不是最终的,我需要这个变量。
如何将此变量存储在comboBox中,还是有其他方法可以解决此问题?
答案 0 :(得分:3)
如果你可以创建所有这些组合框,那么你也可以手动添加“所有那些听众”。有几种选择:
i
传递给该侦听器(通过匿名类,内部类或完全成熟的类)或将最终副本作为Francis传递厄普顿在答案中建议i
来检索发生事件的组合框,您也可以拨打event#getSource
(ActionEvent
以及PropertyChangeEvent
上都可以使用{{1}} {1}}因为你的问题不清楚监听器的类型)。在这种情况下,您可以只创建一次侦听器,也可以为每个组合框创建一个侦听器答案 1 :(得分:0)
您可以在构造函数
中扩展JComboBox和init答案 2 :(得分:0)
在循环中,您可以将i复制到另一个最终变量,并在ActionListener
中引用该最终变量。
答案 3 :(得分:0)
不要使用匿名类,而是创建一个真正的类来实现您关心的接口。这样你就可以传递组合框索引(如果你需要的话,甚至可以传递组合框实例)。