javafx应用程序的进度指示器
我使用下面的代码显示加载任务的进度指示器。我使用ControlsFX进度指示器中的MaskerPane。 但是当我使用组件时,maskerpane只显示1次。请建议一种更好的显示进度指示器的方法javafx应用程序的进度指示器,javafx,controlsfx,Javafx,Controlsfx,我使用下面的代码显示加载任务的进度指示器。我使用ControlsFX进度指示器中的MaskerPane。 但是当我使用组件时,maskerpane只显示1次。请建议一种更好的显示进度指示器的方法 @FXML private MaskerPane progressPane; @FXML private void addMemberSelect() { Task task = new Task<Void>() {
@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属性。啊,我的错。我认为这应该奏效。你能不能试一下,然后带着不同的地方回来?它已经写出了你的代码。