5

我在 AWT 中看到了一个方法:java.awt.Window.getWindows(). 在 JavaFx 中,有什么方法可以获取所有窗口 JavaFx 应用程序?

谢谢,

4

3 回答 3

8

对于运行 java8 的 javafx8 使用

FXRobotHelper.getStages()
 or 
StageHelper.getStages()

这将检索本质上是一个窗口本身的所有阶段(它扩展了窗口类)

于 2014-04-05T14:52:37.077 回答
6

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;
}
于 2013-03-06T10:18:53.027 回答
5

这最终在 Java 9 中得到了正确修复。请参阅javafx.stage.Window.getWindows()

返回一个列表,其中包含对当前显示的 JavaFX 窗口的引用。该列表不可修改 - 尝试修改此列表将导致在运行时抛出 UnsupportedOperationException。

这在 Java 9 中是必不可少的,因为其他解决方案涉及StageHelperFXRobotHelper不再可能,因为这些解决方案存在于com.sun.javafx无法再访问的包中。

于 2017-09-25T13:02:30.347 回答