首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取JavaFX场景图的各个阶段

获取JavaFX场景图的各个阶段
EN

Stack Overflow用户
提问于 2017-12-11 10:57:12
回答 1查看 2K关注 0票数 3

我有一个重新加载CSS的实用工具类。来获取我正在使用的场景图的所有阶段

代码语言:javascript
运行
复制
com.sun.javafx.stage.StageHelper#getStages()

在Java9中,如果在编译过程中不指定--add-exports,就无法再访问它。

代码语言:javascript
运行
复制
--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED

我正在寻找一个替代StageHelper在获得所有阶段上的场景图。

StageHelper.getStages()中有一个与Window.getWindows()等价的公共API。

然而,这两者之间有一个细微的区别:

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

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

我从中得到的是,使用窗口而不是StageHelper不会给我看不见/隐藏的阶段。

在Java8中,Window.impl_getWindows()返回所有窗口,更不用说可见性了。

当前所有现有窗口的列表。

这在Java 9 Window.getWindows()中得到了改变。

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

EN

回答 1

Stack Overflow用户

发布于 2018-05-07 09:40:02

应该避免内部API和不推荐的方法。但是,对于Java 8,如果需要获取场景图上的所有阶段,就没有选择使用这些步骤。

当您需要支持Java 8时,解决方案:

代码语言:javascript
运行
复制
com.sun.javafx.stage.StageHelper.getStages()

这可以通过指定--add作为命令行参数来处理java 9.

代码语言:javascript
运行
复制
--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED

避免使用Window.impl_getWindows(),因为它不会在Java9上运行。

方法名称和返回值是不同的。

Java 8:

代码语言:javascript
运行
复制
Iterator<Window> itr = Window.impl_getWindows();

Java 9:

代码语言:javascript
运行
复制
List<Window> windows = Window.getWindows();

Java 9的解决方案:

使用Window.getWindows()获取所有阶段。

Window.getWindows()的方法描述:

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47751399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档