是否可以为 100 个按钮添加相同的 ActionListener?

Is it possible to add the same ActionListener for 100 buttons?

我创建了一个按钮数组 (JButton[] jb = new JButton[100]),我想为 jb 数组中的所有按钮添加相同的动作侦听器,而不是一个一个地添加它们。

想象一下,每次我点击屏幕上显示的其中一个按钮时,它都会在 jb 数组中打印出该按钮的索引。

简单的答案是肯定的,您可以将相同的侦听器添加到许多不同的按钮,并且通过参数,侦听器将能够确定哪个 Button 实例点击了它。

挑战在于您无法知道数组中的哪个索引与按钮匹配,因此您需要:

  1. 根据按钮中的某些内容找出它是哪个按钮,例如它的 getLabel
  2. 每次点击都扫描数组以找出按钮实例的索引,这很慢 (O(n)),但对于一百个按钮来说可能无关紧要
  3. 将按钮实例到数组索引的映射存储在不同的更快的数据结构中,例如 HashMap (O(1)),如果按钮没有很好地定义为可散列,这可能会变得难看
  4. 对所有按钮使用相同的 ActionListener class,但在侦听器的每个实例上存储一个字段,告诉它它映射到哪个索引