如何简化64个图形动态交替变色的Java代码?
简化方案
核心思路
把所有可点击图形统一管理,用一个通用的点击事件处理器处理所有图形的点击逻辑,彻底避免重复代码。
具体步骤
统一存储所有图形
把64个可点击的Shape对象放到一个集合中(比如List<Shape>),方便批量操作:// 初始化时将所有图形加入集合 List<Shape> allBodyShapes = Arrays.asList(headShape, neckShape, leftChestShape, /* 其余61个图形 */);记录上次选中的图形
定义一个成员变量,用来保存上一次被点击的图形:private Shape lastClickedShape;绑定通用点击事件
给集合里的每个图形绑定同一个点击事件处理器,不用为每个图形单独写方法:for (Shape shape : allBodyShapes) { shape.setOnAction(this::handleShapeClick); }如果是通过FXML绑定事件,直接把所有图形的
onAction属性都指向同一个方法名(比如handleShapeClick)即可。通用点击逻辑实现
写一个统一的处理方法,完成「重置上一个图形+高亮当前图形」的逻辑:public void handleShapeClick(ActionEvent event) { // 获取当前点击的图形 Shape currentShape = (Shape) event.getSource(); // 如果之前有选中的图形,将其恢复为白色 if (lastClickedShape != null) { lastClickedShape.setFill(Color.WHITE); } // 高亮当前点击的图形 currentShape.setFill(Color.LIGHTBLUE); // 更新记录的上一个图形 lastClickedShape = currentShape; }
优势
不管后续新增或减少图形,只需要修改集合里的元素即可,不需要改动点击逻辑代码,完全消除了重复的64行设置代码。
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

