java - 使用 JFrame 的焦点(丢失)来停止录制截屏?

标签 java swing

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

但是,我对何时强制停止录制有点犹豫。现在,我检查用户是否仍希望录制(意味着他们没有单击“停止”按钮)以及应用程序是否仍处于打开状态(关闭应用程序会导致录制正常停止)。

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

建议?

最佳答案

您可能想尝试添加一个 WindowListener 并覆盖 windowDeactivated() 事件,根据操作系统,当框架不再是“Activity 窗口”时应该调用该事件。

更新:

如果您认真确保您的子对话框和窗口归您的应用程序所有(确保您作为所有者传入应用程序框架),那么您可以让您的 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
            }
        }

    }

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

关于java - 使用 JFrame 的焦点(丢失)来停止录制截屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1907917/

相关文章:

java - 用于删除内部双引号的正则表达式

java - 在android中发送非打印字符二进制短信

windows - 在 JFileChooser 中输入文件名时退格使目录返回一级

Java Swing setIconImage(new ImageIcon(byte[])) 不起作用

java - JLayeredPane 重绘删除了一些图像

java - 为什么这个 ActionListener 不起作用?

java - JTextPane 超出了 JDialog 的边界

java - Java-1.8.0_211 和 Maven-3.3.9 导致 AEM-6.3 构建失败

java - String toByte 和 reverse,如果字节被修改则不是双射的

java - 基于用户主目录的 Eclipse 构建路径库 jar 文件