将PropertyChangeListener添加到多个JComboBox

时间:2012-01-02 22:26:44

标签: java jcombobox propertychangelistener

我有一个包含JComboBoxes的表,并希望为每个PropertyChangeListener添加JComboBox,因为某些选择的ComboBox必须更改其他JComboBoxes的可选项。

我无法手动添加所有这些侦听器,因为它们非常多。

我正在使用数组初始化ComboBoxes,因此我在创建JComboBox时已尝试添加侦听器:

comboBox[i].addPropertyChangeListener(new PropertyChangeListener()

但它没有用,因为字段变量i不是最终的,我需要这个变量。

如何将此变量存储在comboBox中,还是有其他方法可以解决此问题?

4 个答案:

答案 0 :(得分:3)

如果你可以创建所有这些组合框,那么你也可以手动添加“所有那些听众”。有几种选择:

  • 每次创建新的组合框时都会创建一个新的侦听器,并将该索引i传递给该侦听器(通过匿名类,内部类或完全成熟的类)或将最终副本作为Francis传递厄普顿在答案中建议
  • 如果您只需要i来检索发生事件的组合框,您也可以拨打event#getSourceActionEvent以及PropertyChangeEvent上都可以使用{{1}} {1}}因为你的问题不清楚监听器的类型)。在这种情况下,您可以只创建一次侦听器,也可以为每个组合框创建一个侦听器

答案 1 :(得分:0)

您可以在构造函数

中扩展JComboBox和init

答案 2 :(得分:0)

在循环中,您可以将i复制到另一个最终变量,并在ActionListener中引用该最终变量。

答案 3 :(得分:0)

不要使用匿名类,而是创建一个真正的类来实现您关心的接口。这样你就可以传递组合框索引(如果你需要的话,甚至可以传递组合框实例)。