如何获取触发actionPerformed方法的JButton在ArrayList中的索引?
解决方法
你需要通过ActionEvent的getSource()方法获取被点击的按钮对象,再用这个对象去ArrayList里查找索引——之前用this是错的,因为this指向的是当前Game类的实例,不是被点击的按钮。
修正后的代码如下:
public class Game implements ActionListener { // 确保buttons是类的成员变量且已正确初始化 private ArrayList<JButton> buttons; @Override public void actionPerformed(ActionEvent event) { // 获取触发事件的按钮对象 JButton clickedButton = (JButton) event.getSource(); // 在列表中查找该按钮的索引 int temp = buttons.indexOf(clickedButton); // 可选:处理按钮不在列表中的情况(此时indexOf返回-1) if (temp != -1) { // 这里编写拿到索引后的业务逻辑 } } }
关键点说明
event.getSource()会返回触发当前事件的组件实例,这里就是被点击的JButton,强制类型转换后就能拿到目标按钮。buttons.indexOf(clickedButton)会返回按钮在ArrayList中的位置,若按钮不在列表内会返回-1,建议添加判断避免后续逻辑出错。- 要保证
buttons变量已正确初始化(比如在构造方法中创建列表并添加按钮),否则会触发空指针异常。
内容的提问来源于stack exchange,提问作者Jonah Koch
相关产品推荐
相关产品推荐

