Javafx - 从 java 类更新 UI 中的进度指示器

Posted

技术标签:

【中文标题】Javafx - 从 java 类更新 UI 中的进度指示器【英文标题】:Javafx - Update progress indicator in UI from java class 【发布时间】:2020-09-26 07:08:46 【问题描述】:

以下是我在fxml中做的改动

java文件的变化,这里是我的代码:

private ProgressIndicator pi;

void handlebuildButtonAction(ActionEvent event) throws IOException, GeneralSecurityException 

if ((entServer.isSelected()==true || compasServer.isSelected()==true)) 

            if(!fileList.isEmpty())
                ProgressIndicator pi = new ProgressIndicator();
                pi.setProgress(10);


当我运行应用程序时,进度指示器没有更新。我不确定如何将更改同步到 UI。在这方面帮助我。提前致谢。

output

【问题讨论】:

错过的 fxml 更改 minimal reproducible example 请.. 【参考方案1】:

例如:如果您设置 0.1 - 进度将是 10%、0.2 - 20% 等等,所以当您设置进度 => 1 时,您将始终“完成”。

这里是一个带有按钮的例子,当你点击按钮时,你的进度条会更新(点击一次+10%):

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;

public class Test extends Application 
    private ProgressIndicator pi;
    private double counter = 0;
    public void start(Stage stage)
    
        ProgressIndicator pi = new ProgressIndicator();
        Button button = new Button("Press");

        TilePane root = new TilePane();

        // action event
        EventHandler<ActionEvent> event = new EventHandler<ActionEvent>() 
            public void handle(ActionEvent e)
            
                counter += 0.1;
                pi.setProgress(counter);
            
        ;


        button.setOnAction(event);

        root.getChildren().add(button);
        root.getChildren().add(pi);

        // create a scene
        Scene scene = new Scene(root, 200, 200);

        // set the scene
        stage.setScene(scene);

        stage.show();
    

    public static void main(String args[])
    
        // launch the application
        launch(args);
    

只需根据您的情况更改此代码:

EventHandler<ActionEvent> event = new EventHandler<ActionEvent>() 
            public void handle(ActionEvent e)
            
                if ((entServer.isSelected()==true || compasServer.isSelected()==true)) 

                    if (!fileList.isEmpty()) 
                         counter += 0.1;
                         pi.setProgress(counter);
                    
                
            
        ;

希望对你有帮助!

【讨论】:

我试过了,但它不起作用。在附加的快照中,百分比仍然设置为 0。 带有按钮的程序示例可以正常工作,我刚刚检查过。但是如果您的程序不工作,请提供更多信息和代码示例。 FXML-我刚刚使用scenebuilder添加了一个进度指示器。 Controller.java - 我想逐步指示progressIndicator(完成几个任务)。但它没有得到更新。我不能有一个按钮,每次都按它来增加百分比。我希望它在每一步之后逐渐增加。 您需要将此代码放入线程中,例如,您在方法 void Start(Stage stage) 中看到事件处理程序的代码,其工作方式类似于 JavaFX 应用程序的线程。 首先提供你的程序代码。您的一段代码提供了一些信息

以上是关于Javafx - 从 java 类更新 UI 中的进度指示器的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JavaFX 中的另一个控制器类访问 UI 元素?

从 JavaFX 中的不同线程更新 UI

JavaFX 中的多线程会挂起 UI

JavaFX - 在两者之间暂停调用UI更新方法

如何从 JavaFX 中的 UI 控件中检索阶段

从另一个 Activity 类执行 Fragment 中的 AsyncTask 并更新其中的 UI