举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > javafx进度条 JavaFX 进度显示器

javafx进度条 JavaFX 进度显示器

2023-03-14 01:18 Java教程

javafx进度条 JavaFX 进度显示器

javafx进度条

JavaFX进度条是一种用于显示任务完成进度的可视化控件。它可以帮助用户更好地理解任务的执行情况,并且可以提供有关任务执行时间的信息。JavaFX进度条可以用于显示文件上传、下载、处理和其他耗时操作的进度。

JavaFX中有两种不同类型的进度条:水平进度条和旋转进度条。水平进度条是一个常见的形式,它通常用于显示长时间操作的完成情况,例如文件上传或下载。旋转进度条则通常用于显示短时间操作的完成情况,例如数据处理。

// 初始化水平进度条 
ProgressBar progressBar = new ProgressBar(); 
progressBar.setPrefWidth(200); 
progressBar.setProgress(0.5); // 设置当前进度 
// 初始化旋转进度条 
ProgressIndicator progressIndicator = new ProgressIndicator(); 
progressIndicator.setPrefWidth(200); 
progressIndicator.setProgress(0.5); // 设置当前进度 

使用JavaFX初始化一个水平或旋转进度条非常容易:只需要初始化一个ProgressBar对象或者ProgressIndicator对象,然后使用setPrefWidth()方法将其大小设置为你想要的大小(单位是像素),最后使用setProgress()方法将当前实际完成量传入即可。

此外,JavaFX中也提供了一些特性来帮助开发者在使用JavaFX中初始化和使用这些控件时提供改善体验。例如:开发者可以通过CSS样式表对水平和旋转进度条样式、大小、背景图片、字体大小、字体颜色、背景颜色等都能够很方便地修改。此外,开发者也可以通过监听器监听当前实际实施量的变化情况(即监听progressProperty()方法) ) ) ) ) ) ) ) ) ) ) ) ) 来执行特定的代码逻辑。

总之,JavaFX中的水平和旋转进度条是一个很好的工具:不但能够有效地显示耗时操作的执行情况(如文件上传/下载/处理/请求/回复/数据分析/数字保存/回读 等) 等) 等) 等) 等) 等) 等) 等) 等) 等)

JavaFX 进度显示器

JavaFX教程 - JavaFX 进度显示器


进度指示器以动态更改饼图的形式显示JavaFX中的操作进度。

以下代码显示如何使用不确定值创建ProgressIndicator。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage stage) {
    Group root = new Group();
    Scene scene = new Scene(root, 260, 80);
    stage.setScene(scene);

    Group g = new Group();

    ProgressIndicator p1 = new ProgressIndicator();
   
    
    g.getChildren().add(p1);
    
    scene.setRoot(g);
    stage.show();
  }

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

上面的代码生成以下结果。

null

创建进度条显示器

以下代码通过传递progress值来创建ProgressIndicator。

ProgressIndicator pi = new ProgressIndicator(0.6);

我们可以使用空构造函数创建没有参数的进度指示器。然后我们可以使用setProgress方法分配值。

如果无法确定进度,我们可以在不确定模式下设置进度控制,直到确定任务的长度。

以下代码显示了如何创建一个ProgressIndicator,完成25%。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage stage) {
    Group root = new Group();
    Scene scene = new Scene(root, 260, 80);
    stage.setScene(scene);

    Group g = new Group();

    ProgressIndicator p1 = new ProgressIndicator();
    p1.setProgress(0.25F);
    
    g.getChildren().add(p1);
    
    scene.setRoot(g);
    stage.show();
  }

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

上面的代码生成以下结果。

null

进度条显示器和后台进程

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {
    Task copyWorker;
    public static void main(String[] args) {
        Application.launch(args);
    }
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Background Processes");
        Group root = new Group();
        Scene scene = new Scene(root, 330, 120, Color.WHITE);

        BorderPane mainPane = new BorderPane();
        root.getChildren().add(mainPane);

        final Label label = new Label("Files Transfer:");
        final ProgressIndicator progressIndicator = new ProgressIndicator(0);

        final HBox hb = new HBox();
        hb.setSpacing(5);
        hb.setAlignment(Pos.CENTER);
        hb.getChildren().addAll(label, progressIndicator);
        mainPane.setTop(hb);

        final Button startButton = new Button("Start");
        final Button cancelButton = new Button("Cancel");
        final HBox hb2 = new HBox();
        hb2.setSpacing(5);
        hb2.setAlignment(Pos.CENTER);
        hb2.getChildren().addAll(startButton, cancelButton);
        mainPane.setBottom(hb2);

        startButton.setOnAction(new EventHandler<ActionEvent>() {

            public void handle(ActionEvent event) {
                startButton.setDisable(true);
                progressIndicator.setProgress(0);
                cancelButton.setDisable(false);
                copyWorker = createWorker();

                progressIndicator.progressProperty().unbind();
                progressIndicator.progressProperty().bind(copyWorker.progressProperty());
               
                copyWorker.messageProperty().addListener(new ChangeListener<String>() {
                    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                        System.out.println(newValue);
                    }
                });

                new Thread(copyWorker).start();
            }
        });
        cancelButton.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent event) {
                startButton.setDisable(false);
                cancelButton.setDisable(true);
                copyWorker.cancel(true);
                progressIndicator.progressProperty().unbind();
                progressIndicator.setProgress(0);
                System.out.println("cancelled.");
            }
        });
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public Task createWorker() {
        return new Task() {
            @Override
            protected Object call() throws Exception {
                for (int i = 0; i < 10; i++) {
                    Thread.sleep(2000);
                    updateMessage("2000 milliseconds");
                    updateProgress(i + 1, 10);
                }
                return true;
            }
        };
    }
}

上面的代码生成以下结果。

null
阅读全文
以上是编程学为你收集整理的javafx进度条 JavaFX 进度显示器全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部