如何配置javaFx的进度条和进度指示器?

我试图在我的页面上添加滑块,如进度条。 但我的代码效果不佳。

我的任务是当我要将某个地方的东西复制到另一个地方时,我想在我的页面上显示一个进度条。
所以在javaFx中我编写了以下任务,但它运行不正常。 该代码运行,但我想以百分比显示工作,如30%,50%和“完成”。 但我的代码没有给我这样的要求所以请帮助我。

我的代码是:

1.进度条和进度指示器的声明

@FXML final ProgressBar progressBar = new ProgressBar(); @FXML final ProgressIndicator progressIndicator = new ProgressIndicator(); 

2.单击复制按钮时分配值。

 @FXML private void handleOnClickButtonAction(MouseEvent event) { if (fromLabel.getText().isEmpty() || toLabel.getText().isEmpty() || fromLabel.getText().equalsIgnoreCase("No Directory Selected") || toLabel.getText().equalsIgnoreCase("No Directory Selected")) { // Nothing } else { progressBar.setProgress(0.1f); progressIndicator.setProgress(progressBar.getProgress()); this.directoryCount.setText("Please Wait !!!"); } } 

这段代码显示我只有10%完成然后直接显示“完成”,但我希望整个过程的百分比如10,20,30,…等然后“完成”。


我的副本代码:

 double i = 1; while (rst.next()) { File srcDirFile = new File(fromLabel.getText() + "/" + rst.getString("nugget_media_files")); File dstDirFile = new File(toLabel.getText() + "/" + rst.getString("nugget_media_files")); File dstDir = new File(toLabel.getText() + "/" + rst.getString("nugget_directory")); if (srcDirFile.lastModified() > dstDirFile.lastModified() || srcDirFile.length() != dstDirFile.length()) { copyDirectory(srcDirFile, dstDirFile, dstDir); } this.currentNuggetCount = i / this.nuggetFolderSize; System.out.println("Nugget Count : " + this.currentNuggetCount); Platform.runLater(new Runnable() { @Override public void run() { progressBar.setProgress(1.0f); progressIndicator.setProgress(progressBar.getProgress()); } }); ++i; } 

这是copyDirectory方法:

 private static void copyDirectory(File srcDir, File dstDir,File destNugget) { System.out.println(srcDir+" >> "+dstDir); if(!destNugget.exists()) { destNugget.mkdirs(); } if (srcDir.isDirectory()) { if (!dstDir.exists()) { dstDir.mkdirs(); } String[] children = srcDir.list(); for (int i=0; i 0) { out.write(buf, 0, len); } in.close(); out.close(); } catch (IOException ex) { System.out.println("Exceptio "+ex); } finally { try { in.close(); } catch (IOException ex) { System.out.println("Exceptio "+ex); } } } } 

您必须在Task中输入代码并在UpdateProgress方法中设置。 在运行Task之前,您必须设置progressBar.progressProperty()。 绑定(task.progressProperty());

这是一个例子: TaskTest

试试这个代码。 它将为您提供带有进度指示器的进度条,该进度条取决于滑块控件。

 public class Main extends Application { @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root); stage.setScene(scene); stage.setTitle("Progress Controls"); final Slider slider = new Slider(); slider.setMin(0); slider.setMax(50); final ProgressBar pb = new ProgressBar(0); final ProgressIndicator pi = new ProgressIndicator(0); slider.valueProperty().addListener(new ChangeListener() { public void changed(ObservableValue ov, Number old_val, Number new_val) { pb.setProgress(new_val.doubleValue()/50); pi.setProgress(new_val.doubleValue()/50); } }); final HBox hb = new HBox(); hb.setSpacing(5); hb.setAlignment(Pos.CENTER); hb.getChildren().addAll(slider, pb, pi); scene.setRoot(hb); stage.show(); } public static void main(String[] args) { launch(args); } }