我的应用程序有很多阶段,可以执行各种不同的操作。我想知道是否可以更改整个应用程序的光标,而不必为所有场景更改它。
例如,如果用户执行长时间运行的任务,我希望光标更改为所有场景的等待光标。当这个任务完成后,我希望光标变回常规光标。
我知道要更改特定场景的光标
scene.setCursor(Cursor.WAIT);
我不想遍历应用程序中的所有阶段,并为每个阶段更改光标。
我想知道您是否可以在应用程序级别而不是场景级别更改光标。我在网上没有找到任何表明您可以这样做的内容。
最佳答案
没有直接的方法可以在应用程序级别执行此操作(据我所知)。但是,光标是一个属性,因此您可以将所有场景的光标绑定(bind)到单个值。
所以类似:
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 子类中定义;您可以将它们放在对您的应用程序结构方便的任何位置。
关于JavaFX改变各个阶段的光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28570211/