java - 更改进度条javaFX的样式

标签 java javafx

ProgressBar 的默认外观是一个蓝色条,随着进度的增加在控件上移动:

enter image description here

我的应用程序中有一张(火车的)图像作为资源。是否有可能使用 CSS(或其他技术)让图像在控件中移动而不是默认的蓝色条?它应该看起来像:

enter image description here

最佳答案

只需使用外部 CSS 文件并在栏上设置背景图像即可。条形图本身由具有样式类 barRegion 表示(请参阅 docs ),因此您只需要类似的东西

.progress-bar > .bar {
    -fx-background-image: url("http://upload.wikimedia.org/wikipedia/commons/c/ce/Train_icon_small.png");
    -fx-background-position: right ;
    -fx-background-color: transparent ;
    -fx-background-repeat: repeat-x ;
}

完整示例:

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class TrainProgressBar extends Application {

    @Override
    public void start(Stage primaryStage) {
        ProgressBar progressBar = new ProgressBar();
        progressBar.setProgress(0);
        Button startButton = new Button("Start");
        startButton.setOnAction(e -> {
            startButton.setDisable(true);
            Task<Void> task = new Task<Void>() {
                @Override
                public Void call() throws Exception {
                    for (int i = 0; i < 100; i++) {
                        Thread.sleep(20);
                        updateProgress(i, 100);
                    }
                    updateProgress(100, 100);
                    return null ;
                }
            };
            progressBar.progressProperty().bind(task.progressProperty());
            task.setOnSucceeded(evt -> startButton.setDisable(false));
            new Thread(task){{setDaemon(true);}}.start();
        });

        VBox root = new VBox(15, progressBar, startButton);
        Scene scene = new Scene(root, 250, 100);
        scene.getStylesheets().add("train-progress-bar.css");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

使用 train-progress-bar.css:

.root {
    -fx-padding: 10 ;
    -fx-alignment: center ;
}

.progress-bar > .bar {
    -fx-background-image: url(http://upload.wikimedia.org/wikipedia/commons/c/ce/Train_icon_small.png);
    -fx-background-position: right ;
    -fx-background-color: transparent ;
    -fx-background-repeat: repeat-x ;
}

关于java - 更改进度条javaFX的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176510/

相关文章:

java - AppEngine 全文文档索引使用词干运算符进行搜索

用于 RangeSlider 的 JavaFX ControlsFX CSS

Javafx双向绑定(bind)SimpleDoubleProperty SimpleStringProperty数组越界

java - 消除不同类中的重复代码

使用新节点时出现 JavaFX 空指针异常

java - 从Java中读取文件返回的字节和从字符串中获取字节之间的区别?

java - Android java的正则表达式提取数字和特定符号

java - 在java中执行查询不返回结果,但在mysql工作台中仍然返回结果

Java泛型,将嵌套列表转换为嵌套数组

java - 如何检测 JavaFX 中选项卡标题的位置和大小