【问题标题】:progress indicator for javafx appjavafx 应用程序的进度指示器
【发布时间】:2016-05-10 08:22:26
【问题描述】:

我正在使用下面的代码来显示加载任务的进度指示器。我正在使用来自 ControlsFX 进度指示器的 MaskerPane。 但是当我使用该组件时,maskerpane 只显示 1 次。请提出一个更好的显示进度指示器的方法。

@FXML
    private MaskerPane progressPane;
 @FXML
        private void addMemberSelect() {
            Task task = new Task<Void>() {
                @Override
                protected Void call() throws Exception {
                    progressPane.setVisible(true);
                    return null;
                }
                @Override
                protected void succeeded(){
                    super.succeeded();
                    content.setContent(null);
                    ScreensController colllectScreenController = new ScreensController();
                    colllectScreenController.loadScreen(Screens.ADD_MEMBER);
                    colllectScreenController.setScreen(Screens.ADD_MEMBER);
                    content.setContent(colllectScreenController);
                    progressPane.setVisible(false);
                }
            };
            new Thread(task).start();
        }

【问题讨论】:

  • 你的问题不是很清楚。您想从 MaskPane 中实现什么?什么不工作? “maskerpane 只显示 1 次”是什么意思?
  • 对不起我的英语。实际上我想在切换场景时显示进度。每个场景都包含一些数据库操作。所以我想显示进度指示器。我使用的上述代码仅显示进度一次。下次它不会显示任何进度条
  • 我没有看到您在任务上使用updateProgress() 来更新进度。如果您不使用它,进度指示器将永远不会显示进度。在 Task 的 javadocs 中有多个示例说明如何使用它。
  • 我正在使用 MaskerPane 的显示和隐藏属性。
  • 啊,我的错。我认为它应该有效。你可以试试this example 并返回它与你的代码不同的地方。

标签: javafx controlsfx


【解决方案1】:

这个例子可以帮助你。

public class MaskerPaneTest extends Application {
@Override
public void start(Stage primaryStage) throws Exception {

    MaskerPane progressPane = new MaskerPane();
    progressPane.setVisible(false);

    Button button = new Button("Show");
    button.setOnAction(event -> {

            Task task = new Task<Void>() {
                @Override
                protected Void call() throws Exception {
                    progressPane.setVisible(true);
                    Thread.sleep(2000);
                    return null;
                }
                @Override
                protected void succeeded(){
                    super.succeeded();
                    progressPane.setVisible(false);
                }
            };
            new Thread(task).start();
        });
    VBox box = new VBox(button, progressPane);
    box.setAlignment(Pos.CENTER);
    Scene scene = new Scene(box, 200, 200);
    primaryStage.setScene(scene);
    primaryStage.show();
}

} 来源:https://gist.github.com/TheItachiUchiha/13f8cc637872ebac4385f92cd16075a7

我对其进行了测试,它运行良好,因此您可以对其进行调整。

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多