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

时间:2009-12-15 14:43:10

标签: java swing

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

然而,我有点挂断电子时间强迫录音停止。现在,我检查用户是否仍希望记录(意味着他们没有点击“停止”按钮),如果应用程序仍处于打开状态(关闭应用程序会导致录制正常停止)。

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

建议?

1 个答案:

答案 0 :(得分: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
            }
        }

    }

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