获取JavaFX场景图上的所有阶段

时间:2017-12-11 10:57:12

标签: java javafx java-9 javafx-9

我有一个重载CSS的实用工具类。 要获得场景图上的所有阶段,我正在使用

com.sun.javafx.stage.StageHelper#getStages()

在Java 9中,如果在编译期间未指定--add-exports,则无法再访问它。

--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED

我正在寻找StageHelper的替代方案来获取场景图上的所有阶段。

StageHelper.getStages()中有一个与Window.getWindows()相当的公开API。

然而这两者之间略有不同:

StageHelper.getStages() :返回包含此时创建的阶段的ObservableList

Window.getWindows() :返回一个列表,其中包含对当前显示的JavaFX窗口的引用。

我从中得到的是使用Window而不是StageHelper不会让我看到隐藏/隐藏的阶段。

在Java 8中,Window.impl_getWindows()返回了所有窗口,它没有说明可见性。

  

所有当前存在的窗口的列表

这改变了Java 9 Window.getWindows()

  

所有当前显示窗口

的列表

1 个答案:

答案 0 :(得分:1)

应避免使用内部API和弃用方法。 但是,对于Java 8,如果需要获取场景图上的所有阶段,则无法使用它们。

需要Java 8支持的解决方案:

com.sun.javafx.stage.StageHelper.getStages()

这可以通过将--add-exports指定为java的命令行参数来与Java 9一起使用。

--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED


避免使用Window.impl_getWindows(),因为它不能在Java 9上运行 方法名称和返回值不同

Java 8:

Iterator<Window> itr = Window.impl_getWindows();

Java 9:

List<Window> windows = Window.getWindows();


Java 9的解决方案:
使用Window.getWindows()获取所有阶段。

Window.getWindows()的方法说明:

  

返回一个列表,其中包含对当前显示的JavaFX窗口的引用。

有人可能会认为这只会返回一个可见的窗口列表。我测试了这个,它将列出所有窗口,甚至是那些最小化(即不可见)的窗口。它与关于显示的描述不同。这意味着在调用stage.show()后显示属性设置为true。