Java Swing实现康威生命游戏时清除按钮无法重置绘制功能问题
问题根源
你有两处完全没必要的数组重置操作,切断了代码中cells数组和界面上实际渲染的JButton实例的关联:
- 启动按钮的错误操作:你在Start按钮的点击事件里执行了
cells = new JButton[size][size];,新创建的空数组完全替换了初始化时绑定了界面按钮的旧数组,后续所有对cells数组的操作都找不到实际的界面组件。 - 清除按钮的错误操作:Clear按钮执行完背景重置后,调用
Arrays.fill(cells, null);把cells数组全部填为null,后续不管是定时器刷新还是手动点击操作cells元素都会触发空指针异常,自然无法正常绘制。 - 额外逻辑漏洞:原有清空逻辑只修改了按钮背景,没有同步重置
Univers状态数组,清空后启动定时器会立刻恢复之前的细胞图案。
修正后的监听器代码
// 启动定时器 Starter.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { timer.start(); // 移除多余的cells数组重置代码 } }); // 停止定时器 Stop.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { timer.stop(); } }); // 清空所有细胞 clear.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清空时先停止定时器,避免刷新冲突 timer.stop(); for(int i = 0; i < size; i++){ for(int j = 0; j < size; j++){ // 同步重置状态数组和按钮背景 Univers[i][j] = false; cells[i][j].setBackground(Color.BLACK); } } // 移除多余的cells数组置空代码 } });
内容的提问来源于stack exchange,提问作者noobieCoder
相关产品推荐
相关产品推荐

