JavaFX Cursor在加载新的anchorPane时等待

时间:2015-10-20 12:13:51

标签: javafx javafx-2

我试图通过删除旧的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。但我无法正常工作。

1 个答案:

答案 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();