是否可以为 100 个按钮添加相同的 ActionListener?
Is it possible to add the same ActionListener for 100 buttons?
我创建了一个按钮数组 (JButton[] jb = new JButton[100]
),我想为 jb
数组中的所有按钮添加相同的动作侦听器,而不是一个一个地添加它们。
想象一下,每次我点击屏幕上显示的其中一个按钮时,它都会在 jb
数组中打印出该按钮的索引。
简单的答案是肯定的,您可以将相同的侦听器添加到许多不同的按钮,并且通过参数,侦听器将能够确定哪个 Button 实例点击了它。
挑战在于您无法知道数组中的哪个索引与按钮匹配,因此您需要:
- 根据按钮中的某些内容找出它是哪个按钮,例如它的
getLabel
值
- 每次点击都扫描数组以找出按钮实例的索引,这很慢 (
O(n)
),但对于一百个按钮来说可能无关紧要
- 将按钮实例到数组索引的映射存储在不同的更快的数据结构中,例如 HashMap (
O(1)
),如果按钮没有很好地定义为可散列,这可能会变得难看
- 对所有按钮使用相同的 ActionListener class,但在侦听器的每个实例上存储一个字段,告诉它它映射到哪个索引
我创建了一个按钮数组 (JButton[] jb = new JButton[100]
),我想为 jb
数组中的所有按钮添加相同的动作侦听器,而不是一个一个地添加它们。
想象一下,每次我点击屏幕上显示的其中一个按钮时,它都会在 jb
数组中打印出该按钮的索引。
简单的答案是肯定的,您可以将相同的侦听器添加到许多不同的按钮,并且通过参数,侦听器将能够确定哪个 Button 实例点击了它。
挑战在于您无法知道数组中的哪个索引与按钮匹配,因此您需要:
- 根据按钮中的某些内容找出它是哪个按钮,例如它的
getLabel
值 - 每次点击都扫描数组以找出按钮实例的索引,这很慢 (
O(n)
),但对于一百个按钮来说可能无关紧要 - 将按钮实例到数组索引的映射存储在不同的更快的数据结构中,例如 HashMap (
O(1)
),如果按钮没有很好地定义为可散列,这可能会变得难看 - 对所有按钮使用相同的 ActionListener class,但在侦听器的每个实例上存储一个字段,告诉它它映射到哪个索引