java - 如何实现在窗口激活之前禁用的 Java/Swing 控件?

标签 java macos swing focus

我正在为 macOS 实现一个 Java/Swing 应用程序,在该应用程序中,大多数与鼠标按钮相关的行为通常会被禁用,直到激活窗口。换句话说,当在非 Activity 窗口上按下鼠标按钮时,该窗口将被激活,但不会发生任何其他情况。 (也有异常(exception)。单击某些按钮将激活窗口并运行其正常操作。)有没有办法做到这一点?基本问题是,当应用程序收到鼠标按下事件时,窗口已经处于 Activity 状态。到目前为止我唯一的想法是按时间关联窗口激活事件和鼠标按下事件,这可能不完全可靠。

最佳答案

您可以使按钮的 contains() 取决于框架当前是否处于 Activity 状态:

    final JFrame frame = new JFrame();

    JButton button = new JButton() {
        @Override
        public boolean contains(int x, int y) {
            return super.contains(x, y) && frame.isActive();
        }
    };

当框架处于非 Activity 状态并且按钮区域被单击时,按钮将不会接受鼠标事件,因为 contains() 返回 false,按钮的父级会测试 contains() (以及父级的父级,直到任何返回 true),它仍然使框架最终处于 Activity 状态,只是按钮不会有机会响应鼠标单击。

关于java - 如何实现在窗口激活之前禁用的 Java/Swing 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45777932/

相关文章:

java - 是否可以为现有的 Scanner 对象指定新的源?

asp.net - 在 Mac 上制作 ASP.NET MVC 项目最简单且成本最低的方法是什么?

java - Swing 只读取 AbstractDocument.Content 的第一个字符。我究竟做错了什么?

java - 我需要画一个中间有文字的圆圈,请帮忙

java - 如何使用 Apache Felix 在 OSGi 中实现 AOP

java - 如何在java中的 vector 中插入 vector 元素

java - 使用javac在一个包内编译四个java文件

macos - 在 Swift 中处理窗口的关闭事件

java - LWJGL 自动本地选择器

java - 在 jbuttons 上以表格格式设置数据