我有一个重载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()
所有当前显示窗口
的列表
答案 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。