3

我有一个重新加载 CSS 的实用程序类。为了获得我正在使用的场景图上的所有阶段

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

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

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

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

有一个等效于StageHelper.getStages()in的公共 API Window.getWindows()

但是,这两者之间存在细微差别:

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

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

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

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

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

这随着 Java 9 Window.getWindows() 而改变

当前显示的所有窗口的列表

4

1 回答 1

2

应避免使用内部 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 上运行。
方法名称和返回值不同

爪哇 8:

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

爪哇 9:

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


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

Window.getWindows() 的方法说明:

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

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

于 2018-05-07T09:40:02.097 回答