首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将进度条中的setProgress延迟0.1步直到已满

如何将进度条中的setProgress延迟0.1步直到已满
EN

Stack Overflow用户
提问于 2017-06-30 22:23:58
回答 1查看 423关注 0票数 1

我正在尝试做一个progressBar,它将设置它的进度在0.1步与延迟1000ms,直到它是“满”。

我已经找到了如何延迟一个步骤的解决方案,但无法将其放入一个for循环中,该循环将以0.1个步骤设置进度,直到进度等于1,因此是满的。

我需要如何修改下面的解决方案才能实现这一目标?

代码语言:javascript
运行
复制
package project;

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Progress extends Application {

StackPane stack = new StackPane();
Scene scene = new Scene(stack, 400, 800);

// Progress Bar
ProgressBar progressBar = new ProgressBar();

public void start(Stage primaryStage) throws Exception {

    // Progress Bar
    stack.getChildren().add(progressBar);
    progressBar.setTranslateX(0);
    progressBar.setTranslateY(0);

    progressBar.setProgress(0);

    Task<Void> sleeper = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            return null;
        }
    };

    sleeper.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
        @Override
        public void handle(WorkerStateEvent event) {
            progressBar.setProgress(0.1);
        }
    });

    new Thread(sleeper).start();

    primaryStage.setScene(scene);
    primaryStage.setTitle("Title");
    primaryStage.show();

}

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

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-30 23:42:34

让您的任务执行迭代,并在执行过程中更新其进度:

代码语言:javascript
运行
复制
Task<Void> sleeper = new Task<Void>() {
    @Override
    protected Void call() throws Exception {

        final int numIterations = 10 ;
        for (int i = 0 ; i < numIterations ; i++) {
            updateProgress(i, numIterations);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
        }
        updateProgress(numIterations, numIterations);
        return null;
    }
};

然后只需将进度条的进度绑定到任务的进度:

代码语言:javascript
运行
复制
progressBar.progressProperty().bind(sleeper.progressProperty());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44848762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档