我试图通过删除旧的anchorPane来加载现有场景中的新anchorPane。现在我需要向用户显示加载光标和用户执行的操作不应发生(如按钮点击或按键)。
我已经使用了Cursor.WAIT,但仍然可以执行操作。
anchorPane.getScene()的setCursor(Cursor.WAIT);
HomeController controller=new HomeController(stage,anchorPane);
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/fxml/home.fxml"));
loader.setController(controller);
Parent root = null;
try {
root=(Parent) loader.load();
} catch (IOException e) {
LOGGER.error("Message is " + e);
e.printStackTrace();
}
anchorPane.getChildren().remove(0);
anchorPane.getChildren().add(root);
我在此代码之前添加了Cursor.WAIT。但我无法正常工作。
答案 0 :(得分:0)
Cursor.WAIT仅更改光标图标,但不会阻止您与视图进行交互。如果您想阻止用户与您的视图进行交互,您可以禁用btn.setEnabled(false)等元素。
向用户显示您正在执行某些后台操作,他/她应该等到完成后才能使用任务和对话框。
Task task = new Task(new Runnable() { ... do stuff ... });
Dialog dialog = new Alert(AlertType.INFORMATION);
dialog.setTitle("Wait");
dialog.disableButton(ButtonType.OK);
task.stateProperty().addListener(
(observableValue, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED
|| newState == Worker.State.FAILED
|| newState == Worker.State.CANCELLED) {
dialog.close();
}
});
new Thread(task).start();
dialog.showAndWait();