使用JFrame的焦点(丢失)来停止录制屏幕投射?

the*_*e19 3 java swing

在我的Swing应用程序中,我使用自定义模块来记录屏幕转换.

但是,我有点挂断了什么时候迫使录音停止.现在,我检查用户是否仍希望记录(意味着他们没有点击"停止"按钮),如果应用程序仍处于打开状态(关闭应用程序会导致录制正常停止).

问题是如果应用程序被推到其他应用程序后面或者最小化,录制将继续,导致录制"垃圾".当应用程序不再"在屏幕顶部"时,我需要停止录制.由于其他对话框和事物的出现,使用应用程序的焦点似乎不起作用.

建议?

Bry*_*anD 6

您可能想尝试添加一个WindowListener并覆盖windowDeactivated()事件,当事件不再是根据操作系统的"活动窗口"时,应该调用该事件.

更新:

如果您认真确保您的子对话框和窗口由您的应用程序拥有(确保您将应用程序框架作为所有者传递),那么您可以使WindowListener执行以下操作:

    public void windowDeactivated(WindowEvent e) {
        if(e.getOppositeWindow() == null){
            // will be null when another application window gets activated, stop recording
        }
        for(Window w : appFrame.getOwnedWindows()){
            if(w.equals(e.getOppositeWindow())){
                // one of the windows owned by the frame is active, don't stop recording
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

然后,您将能够确定窗口焦点是否完全离开了应用程序,或者焦点是否刚刚更改为其他子窗口/对话框.