JAVAFX ProgressBar ,如何让进度条上显示百分比啊,而且是缓慢的递增的那种

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVAFX ProgressBar ,如何让进度条上显示百分比啊,而且是缓慢的递增的那种相关的知识,希望对你有一定的参考价值。

求大神帮帮忙~

参考技术A 把ProgressBar的progressProperty绑定到一个Task的progressProperty追问

这是一个连连看游戏的进度条,我想让它随时间渐渐的从1%增长到100%,具体要怎么做吖

追答

下面的代码仅作参考,没有实际价值:
import javafx.application.Application;
import javafx.stage.Stage;
import java.util.concurrent.TimeUnit;
import javafx.concurrent.Task;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;

public class FXProgress extends Application
public static void main(final java.lang.String[] args)
Application.launch(FXProgress.class, args);


@Override public void start(Stage stage)
stage.setTitle("FXProgress");
ProgressBar bar = new ProgressBar();
Task task = createTask();
bar.progressProperty().bind(task.progressProperty());
Group root = new Group();
root.getChildren().add(bar);
Scene scene = new Scene(root);
stage.setScene(scene);
Thread thread = new Thread(task);
thread.setDaemon(true);
thread.start();
stage.show();


private Task createTask()

return new Task()
@Override protected Void call() throws Exception
for(int iterations = 0; iterations < 100; iterations++)
if(isCancelled()) break;
TimeUnit.SECONDS.sleep(1);
updateProgress(iterations,100);

return null;

;

本回答被提问者采纳

如何使用 JavaFX 垂直堆叠下载窗格?

【中文标题】如何使用 JavaFX 垂直堆叠下载窗格?【英文标题】:How can I stack download panes vertically using JavaFX? 【发布时间】:2019-05-13 23:13:39 【问题描述】:

我有一个方法可以返回一个窗格,该窗格上有一些按钮和一个 ProgressBar,用于呈现挂起下载的进度,同时允许用户暂停、恢复或取消它:

我的问题是,每当我开始新下载时,我想在最后一个窗格下方添加一个新窗格,并在开始新下载时垂直堆叠它们。但是,我创建的逻辑会在与上一个相同的位置打开一个新窗格 - 覆盖它。

如何让这些窗格堆叠起来?

我尝试过的

package DownloadManager;

import java.io.File;
import java.util.ArrayList;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class ProgressClass 

    public Pane show( DownloadAction ob,Button pause,Button resume,Button delete,Thread thread) 
    


        File resumefile = new File("C:\\Users\\kamran ali\\Desktop\\play.png");
        File pausefile = new File("C:\\Users\\kamran ali\\Desktop\\pause1.png");
        File deletefile = new File("C:\\Users\\kamran ali\\Desktop\\delete1.png");


        Image resIcon = new Image(resumefile.toURI().toString());
        Image paseIcon = new Image(pausefile.toURI().toString());
        Image delIcon = new Image(deletefile.toURI().toString());



        ImageView icon0 = new ImageView(resIcon);
        ImageView icon1 = new ImageView(paseIcon);
        ImageView icon2 = new ImageView(delIcon);
        icon0.setFitWidth(10);
        icon0.setFitHeight(10);
        icon1.setFitWidth(10);
        icon1.setFitHeight(10);

        icon2.setFitWidth(10);
        icon2.setFitHeight(10);


         pause  = new Button(null,icon1);
         resume  = new Button(null,icon0);
         delete= new Button(null,icon2);

        pause.setLayoutX(270);
        resume.setLayoutX(300);
        delete.setLayoutX(330);

        pause.setLayoutY(120);
        resume.setLayoutY(120);
        delete.setLayoutY(120);

        pause.setOnAction(e->
            thread.suspend();
        );

        resume.setOnAction(e->
            thread.resume();
        );

        ProgressBar pb = new ProgressBar(0.0);
        ProgressIndicator pi = new ProgressIndicator(0.0);
        Label label = new Label();
        label.setLayoutX(100);
        label.setLayoutY(80);
        label.setText(ob.getpath());
        pi.setLayoutX(510);
        pi.setLayoutY(80);
        pi.setPrefSize(50, 50);
        pb.setLayoutX(100);
        pb.setLayoutY(100);
        pb.setPrefWidth(400);
        pb.setProgress(0);
        pb.isIndeterminate();
        pb.progressProperty().unbind();
    pi.progressProperty().bind(ob.progressProperty());
        pb.progressProperty().bind(ob.progressProperty());
        Pane pane1 = new Pane();
    pane1.setLayoutY(40);
        pane1.getChildren().addAll(pb,pi,label,pause,resume,delete);
    return pane1;
    




【问题讨论】:

【参考方案1】:

当前显示的代码仅描述了您的“窗格”是如何创建的,而不是它们是如何对齐/放置到父容器/窗口中的。

您对ProgressClass 的元素使用absolute 定位 - 窗格,我猜您在“外部”也是如此。

修复:改用布局容器。

在包含其他元素的外部窗口中,添加javafx.scene.layout.VBox,而不是直接添加创建的ProgressClass

每次您添加另一个 ProgressClass-Instance 时,请将其添加到 javafx.scene.layout.VBox 作为子代 - 它会自动堆叠您的 ProgressClasses 的各个实例垂直


您可能不想访问一些布局教程来练习使用布局容器,这些布局容器比自己放置每个元素更强大。

参见 f.e.:this official tutorial 和 VBox() (J8)

【讨论】:

以上是关于JAVAFX ProgressBar ,如何让进度条上显示百分比啊,而且是缓慢的递增的那种的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaFX 垂直堆叠下载窗格?

C# 中的 progressBar1 如何使用这个进度条控件.?

如何让 ProgressBar 循环并处于确定模式? [复制]

在android中,在main.xml中有一个ProgressBar进度条组件和一个button按钮,在初始状态让该进度条隐藏怎么

如何显示ProgressBar的进度条,给分100

如何给progressbar圆形进度条设置颜色