JavaFX 更改所有阶段的光标

JavaFX change cursor of all stages

我有一个应用程序有很多阶段,执行各种不同的事情。我想知道是否可以更改整个应用程序的 Cursor,而不是必须为所有场景更改它。

例如,如果用户做一个很长的运行任务,我希望所有场景的Cursor都变成wait cursor。完成此任务后,我希望光标变回常规光标。

我知道要更改特定场景的光标,您可以这样做

scene.setCursor(Cursor.WAIT);

我宁愿不必遍历应用程序中的所有阶段,也不必为每个阶段更改光标。

我想知道您是否可以在应用程序级别而不是场景级别更改光标。我没有在网上找到任何建议您可以这样做的内容。

没有直接的方法可以在应用程序级别(据我所知)执行此操作。然而,游标是一个属性,因此您可以将所有场景的游标绑定到一个值。

所以像这样:

public class MyApp extends Application {

    private final ObjectProperty<Cursor> cursor = new SimpleObjectProperty<>(Cursor.DEFAULT);

    @Override
    public void start(Stage primaryStage) {
        Parent root =  ... ;
        // ...

        someButton.setOnAction(event -> {
            Parent stageRoot = ... ;
            Stage anotherStage = new Stage();
            anotherStage.setScene(createScene(stageRoot, ..., ...));
            anotherStage.show();
        });

        primaryStage.setScene(createScene(root, width, height));
        primaryStage.show();

    }

    private static Scene createScene(Parent root, double width, double height) {
        Scene scene = new Scene(root, width, height);
        scene.cursorProperty().bind(cursor);
        return scene ;
    }
}

现在任何时候都可以

cursor.set(Cursor.WAIT);

任何通过createScene(...)方法创建的场景都会改变它的光标。

显然游标 属性 和实用方法不必在 Application 子类中定义;您可以将它们放在任何对您的应用程序结构方便的地方。