在Java应用程序中获取任何/所有活动的JFrame?

2022-09-02 12:33:43

有没有办法从Java应用程序中列出屏幕上可见的所有当前打开/活动(我不确定这里的术语)?感谢您的帮助。JFrames


答案 1

Frame.getFrames() 返回所有帧的数组。

或者,正如@mKorbel所提到的,将返回所有窗口 - 因为(&)扩展将提供所有框架,然后是一些。有必要迭代它们以发现哪些当前可见。Window.getWindows()FrameJFrameWindow


答案 2

我同意Stefan Reich的评论。

一个非常有用的方法是...TDD(测试驱动开发)是有用的一个上下文(如果不是必需的):在(集成)测试中,您有各种对象显示(等),如果在测试正常完成之前出现问题(或者即使它正常完成),您经常需要在测试的清理代码中处理从属窗口。像这样的东西(在JUnit中):Window.getOwnedWindows()WindowJDialog

@After
public void executedAfterEach() throws Exception {
    // dispose of dependent Windows...
    EventQueue.invokeAndWait( new Runnable(){
        @Override
        public void run() {
            if( app.mainFrame != null ){
                for( Window window : app.mainFrame.getOwnedWindows() ){
                    if( window.isVisible() ){
                        System.out.println( String.format( "# disposing of %s", window.getClass() ));
                        window.dispose();
                    }
                }
            }
        }
    });
}