举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > javafx进度条内显示文本 JavaFX 进度条

javafx进度条内显示文本 JavaFX 进度条

2023-03-27 05:20 Java教程

javafx进度条内显示文本 JavaFX 进度条

javafx进度条内显示文本

JavaFX进度条是一种用于显示任务进度的可视化控件,它可以帮助用户更好地理解任务的执行情况。在JavaFX中,进度条可以通过ProgressBar类来实现。

ProgressBar类提供了一个可以在进度条内显示文本的方法,即setText()方法。使用此方法,开发人员可以将文本添加到进度条中,并将其显示出来。

// 创建一个ProgressBar对象 
ProgressBar progressBar = new ProgressBar(); 
// 设置文本 
progressBar.setText("Loading..."); 
// 添加到布局中 
root.getChildren().add(progressBar); 

上面的代码片段创建了一个ProgressBar对象,并使用setText()方法将文本“Loading...”添加到进度条中。当用户看到此文本时,就会意识到当前正在执行的任务是正在加载数据。

除了使用setText()方法外,开发人员还可以使用CSS样式表来定义文本样式。例如,要将字体大小设置为20px,颜色设置为黑色:

.progress-bar .text { 
    font-size: 20px; 
    color: black; 
}   

通过使用CSS样式表和setText()方法,开发人员可以很容易地将文本添加到JavaFX中的进度条中并显示出来。

JavaFX 进度条

JavaFX教程 - JavaFX进度条


进度条可视化JavaFX应用程序中的操作进度。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
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();

    ProgressBar p2 = new ProgressBar();

    
    g.getChildren().add(p2);
    
    scene.setRoot(g);
    stage.show();
  }

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

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

null

创建ProgressBar

以下代码显示如何通过传递progress值来创建ProgressBar。

ProgressBar pb = new ProgressBar(0.6);

您还可以使用空构造函数创建没有参数的进度条。然后使用setProgress方法分配值。

如果我们不能确定任务的完全完成时间,我们可以设置进度条在不确定模式,直到确定任务的长度。

以下代码显示如何创建一个25%完成的ProgressBar。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
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();

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

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

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

null

例子

以下代码显示如何将ProgressBar与后台进程一起使用。

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.ProgressBar;
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) {
    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 ProgressBar progressBar = new ProgressBar(0);

    final HBox hb = new HBox();
    hb.setSpacing(5);
    hb.setAlignment(Pos.CENTER);
    hb.getChildren().addAll(label, progressBar);
    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);
        progressBar.setProgress(0);
        cancelButton.setDisable(false);
        copyWorker = createWorker();
        progressBar.progressProperty().unbind();
        progressBar.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);
        progressBar.progressProperty().unbind();
        progressBar.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 名动网 mdwl.vip 版权所有 联系我们