javafx应用程序的进度指示器

javafx应用程序的进度指示器,javafx,controlsfx,Javafx,Controlsfx,我使用下面的代码显示加载任务的进度指示器。我使用ControlsFX进度指示器中的MaskerPane。 但是当我使用组件时,maskerpane只显示1次。请建议一种更好的显示进度指示器的方法 @FXML private MaskerPane progressPane; @FXML private void addMemberSelect() { Task task = new Task<Void>() {

我使用下面的代码显示加载任务的进度指示器。我使用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();
        }
@FXML
私人面具;
@FXML
私有void addMemberSelect(){
任务=新任务(){
@凌驾
受保护的Void调用()引发异常{
progressPane.setVisible(true);
返回null;
}
@凌驾
受保护的无效已成功(){
super.successed();
content.setContent(null);
ScreensController collectScreenController=新ScreensController();
collectScreenController.loadScreen(Screens.ADD_成员);
collectScreenController.setScreen(Screens.ADD_成员);
content.setContent(collectScreenController);
progressPane.setVisible(false);
}
};
新线程(任务).start();
}

这个例子可以帮助您

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();
}
public类MaskerPaneTest扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
MaskerPane progressPane=新建MaskerPane();
progressPane.setVisible(false);
按钮按钮=新按钮(“显示”);
按钮。设置操作(事件->{
任务=新任务(){
@凌驾
受保护的Void调用()引发异常{
progressPane.setVisible(true);
《睡眠》(2000年);
返回null;
}
@凌驾
受保护的无效已成功(){
super.successed();
progressPane.setVisible(false);
}
};
新线程(任务).start();
});
VBox box=新的VBox(按钮,进度窗格);
框。设置对齐(位置中心);
场景=新场景(框,200200);
初级阶段。场景(场景);
primaryStage.show();
}
} 资料来源:


我对它进行了测试,效果很好,因此您可以对其进行调整。

此示例可以帮助您

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();
}
public类MaskerPaneTest扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
MaskerPane progressPane=新建MaskerPane();
progressPane.setVisible(false);
按钮按钮=新按钮(“显示”);
按钮。设置操作(事件->{
任务=新任务(){
@凌驾
受保护的Void调用()引发异常{
progressPane.setVisible(true);
《睡眠》(2000年);
返回null;
}
@凌驾
受保护的无效已成功(){
super.successed();
progressPane.setVisible(false);
}
};
新线程(任务).start();
});
VBox box=新的VBox(按钮,进度窗格);
框。设置对齐(位置中心);
场景=新场景(框,200200);
初级阶段。场景(场景);
primaryStage.show();
}
} 资料来源:


我对它进行了测试,效果很好,所以你可以调整它。

你的问题不是很清楚。你想从MaskPane中获得什么?什么不起作用?你说的“遮罩窗格只显示一次”是什么意思?对不起,我的英语不好。实际上我想在切换场景时显示进度。每个场景都包含一些db操作。因此我想显示进度指示器。我使用的上述代码只显示一次进度。下次它不会显示任何进度。我看不到您通过在任务上使用更新进度。如果不使用它,进度指示器将永远不会显示进度。有多个例子展示了如何在javadocs for.Im中使用MaskerPane的show和hide属性。啊,我的错。我认为这应该奏效。你能试一下,然后带着不同的地方回来吗?你的问题不是很清楚。你想从MaskPane中获得什么?什么不起作用?你说的“遮罩窗格只显示一次”是什么意思?对不起,我的英语不好。实际上我想在切换场景时显示进度。每个场景都包含一些db操作。因此我想显示进度指示器。我使用的上述代码只显示一次进度。下次它不会显示任何进度。我看不到您通过在任务上使用更新进度。如果不使用它,进度指示器将永远不会显示进度。有多个例子展示了如何在javadocs for.Im中使用MaskerPane的show和hide属性。啊,我的错。我认为这应该奏效。你能不能试一下,然后带着不同的地方回来?它已经写出了你的代码。