You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化64个图形动态交替变色的Java代码?

简化方案

核心思路

把所有可点击图形统一管理,用一个通用的点击事件处理器处理所有图形的点击逻辑,彻底避免重复代码。

具体步骤

  1. 统一存储所有图形
    把64个可点击的Shape对象放到一个集合中(比如List<Shape>),方便批量操作:

    // 初始化时将所有图形加入集合
    List<Shape> allBodyShapes = Arrays.asList(headShape, neckShape, leftChestShape, /* 其余61个图形 */);
    
  2. 记录上次选中的图形
    定义一个成员变量,用来保存上一次被点击的图形:

    private Shape lastClickedShape;
    
  3. 绑定通用点击事件
    给集合里的每个图形绑定同一个点击事件处理器,不用为每个图形单独写方法:

    for (Shape shape : allBodyShapes) {
        shape.setOnAction(this::handleShapeClick);
    }
    

    如果是通过FXML绑定事件,直接把所有图形的onAction属性都指向同一个方法名(比如handleShapeClick)即可。

  4. 通用点击逻辑实现
    写一个统一的处理方法,完成「重置上一个图形+高亮当前图形」的逻辑:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:35:01