我在 AWT 中看到了一个方法:java.awt.Window.getWindows()
. 在 JavaFx 中,有什么方法可以获取所有窗口 JavaFx 应用程序?
谢谢,
对于运行 java8 的 javafx8 使用
FXRobotHelper.getStages()
or
StageHelper.getStages()
这将检索本质上是一个窗口本身的所有阶段(它扩展了窗口类)
AFAIK,仍然没有合适的方法来做到这一点。
虽然有一个肮脏和短期的方式:
浏览源代码javafx.stage.Window
,有一个静态方法似乎可以满足您的期望:javafx.stage.Window#impl_getWindows()
。
但是有一堆免责声明:
/**
* Return all Windows
*
* @return Iterator of all Windows
* @treatAsPrivate implementation detail
* @deprecated This is an internal API that is not intended for use and will be removed in the next version
*/
@Deprecated
@NoInit
public static Iterator<Window> impl_getWindows() {
final Iterator iterator = AccessController.doPrivileged(
new PrivilegedAction<Iterator>() {
@Override public Iterator run() {
return windowQueue.iterator();
}
}
);
return iterator;
}
这最终在 Java 9 中得到了正确修复。请参阅javafx.stage.Window.getWindows()
返回一个列表,其中包含对当前显示的 JavaFX 窗口的引用。该列表不可修改 - 尝试修改此列表将导致在运行时抛出 UnsupportedOperationException。
这在 Java 9 中是必不可少的,因为其他解决方案涉及StageHelper
或FXRobotHelper
不再可能,因为这些解决方案存在于com.sun.javafx
无法再访问的包中。