0

我有一个表,JComboBoxes并且想在PropertyChangeListener每个表中添加一个JComboBox,因为 ComboBoxes 的某些选择必须更改其他的可选择项JComboBoxes

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

JComboBox我正在用一个数组初始化 ComboBoxes,所以当我创建这样的对象时,我已经尝试添加侦听器:

comboBox[i].addPropertyChangeListener(new PropertyChangeListener()

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

如何将此变量存储在组合框中,或者是否有其他可能解决此问题?

4

4 回答 4

3

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

  • 每次创建新组合框时都会创建一个新侦听器,并将该索引传递i给该侦听器(通过匿名类、内部类或完全成熟的类)或按照 Francis Upton 在他的回答中建议的那样制作最终副本
  • 如果您i只需要检索事件起源的组合框,您也可以调用(因为您的问题不清楚侦听器的类型,所以event#getSource在两者上都可用ActionEvent) 。PropertyChangeEvent在这种情况下,您可以只创建一次侦听器,也可以为每个组合框创建一个侦听器
于 2012-01-02T22:40:44.653 回答
0

您可以扩展 JComboBox 并在构造函数中初始化您想要的内容

于 2012-01-02T22:35:14.530 回答
0

在您的循环中,您可以将 i 复制到另一个最终变量,并在您的ActionListener.

于 2012-01-02T22:35:24.410 回答
0

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

于 2012-01-02T22:36:44.387 回答