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

寻求支持半星、十分之八星评分可视化的JavaFX库

JavaFX 支持精确星级评分可视化的方案

自定义实现(最灵活可控)

不需要依赖第三方库,自己写个简单的自定义控件就能实现任意精度的星级显示,核心思路是用两层星星:底层放灰色空星,上层叠加彩色实星,通过控制上层实星的显示区域(viewport)来实现部分星的效果。

示例代码:

import javafx.geometry.Pos;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.shape.Rectangle2D;

public class PreciseRating extends HBox {
    private static final int MAX_STARS = 5;
    private static final double STAR_SIZE = 20.0;

    public PreciseRating() {
        // 添加底层空星
        for (int i = 0; i < MAX_STARS; i++) {
            ImageView emptyStar = new ImageView(new Image("empty_star.png"));
            emptyStar.setFitWidth(STAR_SIZE);
            emptyStar.setFitHeight(STAR_SIZE);
            getChildren().add(emptyStar);
        }

        // 添加上层实星容器
        HBox filledContainer = new HBox();
        filledContainer.setMouseTransparent(true);
        for (int i = 0; i < MAX_STARS; i++) {
            ImageView filledStar = new ImageView(new Image("filled_star.png"));
            filledStar.setFitWidth(STAR_SIZE);
            filledStar.setFitHeight(STAR_SIZE);
            filledContainer.getChildren().add(filledStar);
        }
        getChildren().add(filledContainer);
        setAlignment(Pos.CENTER_LEFT);
    }

    public void setRating(double rating) {
        double clampedRating = Math.max(0, Math.min(MAX_STARS, rating));
        HBox filledContainer = (HBox) getChildren().get(1);

        int fullStars = (int) Math.floor(clampedRating);
        double partialWidth = (clampedRating - fullStars) * STAR_SIZE;

        for (int i = 0; i < MAX_STARS; i++) {
            ImageView star = (ImageView) filledContainer.getChildren().get(i);
            if (i < fullStars) {
                star.setViewport(null);
                star.setVisible(true);
            } else if (i == fullStars && partialWidth > 0) {
                star.setViewport(new Rectangle2D(0, 0, partialWidth, STAR_SIZE));
                star.setVisible(true);
            } else {
                star.setVisible(false);
            }
        }
    }
}

这种方式可以支持到0.1星的精度,只要替换对应的空星、实星图片即可。

第三方库选项

如果不想自己写,这些成熟的JavaFX控件库支持精确星级显示:

  • ControlsFX:它的Rating控件支持小数评分,只需开启partialRating属性为true,然后设置rating为3.8这类小数就能自动渲染部分星。
  • JFoenix:它的星级控件原生支持部分星展示,直接设置评分值为小数即可实现对应比例的星级填充。

内容的提问来源于stack exchange,提问作者jonas-pammi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:04:55