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

如何设置JavaFX中ControlsFX的SegmentedBar各分段的颜色?

解决方案

SegmentedBar的单个分段样式无法直接通过控件全局的setStyle方法修改,原因是每个分段是控件内部独立渲染的Cell节点,需要通过自定义Cell工厂单独指定样式,以下是两种可行方案:

方法1:代码内动态指定颜色(无需额外CSS文件)

直接将分段所需颜色存在Segment的userData属性中,在Cell渲染时读取并设置样式:

@FXML SegmentedBar segments;

public void setSegments() {
    // 构造两个分段,分别存储需要的颜色到userData
    SegmentedBar.Segment seg1 = new SegmentedBar.Segment(10, "10");
    seg1.setUserData("#27ae60"); // 第一个分段设为绿色
    SegmentedBar.Segment seg2 = new SegmentedBar.Segment(90, "90");
    seg2.setUserData("#2980b9"); // 第二个分段设为蓝色

    segments.getSegments().addAll(seg1, seg2);

    // 自定义Cell工厂处理每个分段的样式
    segments.setCellFactory(bar -> new SegmentedBar.Cell<>() {
        @Override
        protected void updateItem(SegmentedBar.Segment item, boolean empty) {
            super.updateItem(item, empty);
            if (empty || item == null) {
                setStyle("");
                return;
            }
            // 读取颜色设置当前分段Cell的背景
            String color = (String) item.getUserData();
            setStyle("-fx-background-color: " + color + ";");
        }
    });
}

方法2:绑定CSS类(适合样式统一管理场景)

如果项目样式统一放在CSS文件中管理,可以给分段添加自定义样式类,同步到渲染Cell后通过CSS定义样式:

Java代码部分

@FXML SegmentedBar segments;

public void setSegments() {
    // 给分段添加自定义样式类标识
    SegmentedBar.Segment seg1 = new SegmentedBar.Segment(10, "10");
    seg1.getStyleClass().add("segment-first");
    SegmentedBar.Segment seg2 = new SegmentedBar.Segment(90, "90");
    seg2.getStyleClass().add("segment-second");

    segments.getSegments().addAll(seg1, seg2);

    segments.setCellFactory(bar -> new SegmentedBar.Cell<>() {
        @Override
        protected void updateItem(SegmentedBar.Segment item, boolean empty) {
            super.updateItem(item, empty);
            // 先移除旧的自定义样式类,避免Cell复用导致样式错乱
            getStyleClass().removeAll("segment-first", "segment-second");
            if (empty || item == null) {
                return;
            }
            // 同步当前分段的样式类到渲染Cell
            getStyleClass().addAll(item.getStyleClass());
        }
    });
}

对应CSS文件部分

.segment-first {
    -fx-background-color: #27ae60;
}
.segment-second {
    -fx-background-color: #2980b9;
}

内容的提问来源于stack exchange,提问作者sillyPin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:15:03