JavaFX更改所有阶段的游标

时间:2015-02-17 20:08:56

标签: java javafx javafx-2 javafx-8

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

例如,如果用户执行长时间运行的任务,我希望Cursor更改为所有场景的等待光标。完成此任务后,我希望光标更改回常规光标。

我明白要更改特定场景的光标,你可以做到

scene.setCursor(Cursor.WAIT);

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

我想知道你是否可以在应用程序级别而不是场景级别更改光标。我没有在网上找到任何暗示你可以的东西。

1 个答案:

答案 0 :(得分:1)

在应用程序级别(我知道)没有直接的方法可以做到这一点。但是,光标是一个属性,因此您可以绑定所有场景'游标为单一值。

类似于:

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子类中定义游标属性和实用方法;你可以把这些放在方便你的应用程序结构的地方。