Java Swing按钮点击计数时单次点击变量直接达最大值如何修复
Java按钮点击计数遍历功能问题修复方案
问题1:单次点击后循环变量直接达到上限
问题原因
actionPerformed是按钮点击的单次触发回调方法,你将for循环写在该方法内部,每次点击时循环会一次性执行完全部3次迭代,不会等待下一次点击触发- 只要按钮处于启用状态,
z就会在单次点击事件中连续自增3次直接到上限,无法实现逐次点击遍历的效果 - 代码中还存在语法错误:
introduceButton一行没有结束,缺少分号或后续操作
修复方案
将遍历索引变量提取到监听器外部作为类成员变量,每次点击仅执行1次索引自增和文本赋值操作,无需在事件方法内写循环。
示例代码:
// 类成员变量,放在监听器外部 private int navIndex = 0; private final String[] box = {"paws quantity", "tail(cm)","paws qy"}; // 监听器内部代码 introduceButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { int agex = Integer.parseInt(datafield.getText()); ArrayList<Integer> objdata = new ArrayList<Integer>(); // 每次点击仅更新一次文本 txtvar.setText(box[navIndex]); // 索引自增,超过数组长度后回卷到开头(可根据需求调整) navIndex = (navIndex + 1) % box.length; // 其他业务逻辑 objdata.add(agex); dog abstractdog = new dog(agex, agex, agex); } });
问题2:自定义计数器始终为0
问题原因
- 你每次触发点击事件时,都在
actionPerformed内部重新实例化了click对象,相当于每次点击都新建了一个初始值为0的计数器,之前的计数结果完全不会保留 - 没有调用
count()方法触发自增逻辑,直接读取了初始值_incr
修复方案
将计数器对象提取到监听器外部作为类成员变量,每次点击时调用count()方法获取自增后的值。
示例代码:
// 类成员变量,放在监听器外部 private click clck = new click(0); private final String[] box = {"paws quantity", "tail(cm)","paws qy"}; // 监听器内部代码 introduceButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { int agex = Integer.parseInt(datafield.getText()); ArrayList<Integer> objdata = new ArrayList<Integer>(); // 调用count方法获取自增后的计数 int currentCount = clck.count(); // 用计数作为索引遍历数组,超过长度回卷 int navIndex = (currentCount -1) % box.length; txtvar.setText(box[navIndex]); // 其他业务逻辑 objdata.add(agex); dog abstractdog = new dog(agex, agex, agex); } });
内容的提问来源于stack exchange,提问作者George Botnari
相关产品推荐
相关产品推荐

