glassPane 不阻止输入

2023-12-19

我用 java 构建了一个小型 GUI 游戏,有时我使用 glassPane 暂时阻止所有鼠标输入。我以前使用过 glassPane 没有任何问题,但这次它不会阻止鼠标输入。因此,当 glassPane 启用时,我仍然可以按下 contentPane 上的按钮,我确信它已启用,因为我可以看到我在其上绘制的内容。

这是一小段可运行的代码,显示了问题:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class GuiGame {

    private JPanel contentPane;
    private JButton button;
    private JFrame frame;
    private JPanel glassPane;
    private Dimension screenSize;

    public static void main(String[] args) {
        GuiGame gui = new GuiGame();
        gui.createGUI();
    }

    public void createGUI()
    {
        frame = new JFrame("BadGuiGame!");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        contentPane = new JPanel();
        contentPane.setPreferredSize(new Dimension(400, 400));
        contentPane.setBackground(Color.WHITE);
        contentPane.setLayout(null);
        frame.setContentPane(contentPane);
        frame.pack();

        glassPane = new JPanel();
        glassPane.setOpaque(false);
        glassPane.setLayout(null);
        JLabel glassLabel = new JLabel("Glass Enabled");
        glassLabel.setBounds(160, 50, 80, 20);
        glassPane.add(glassLabel);
        frame.setGlassPane(glassPane);

        int buttonWidth = frame.getWidth()/2;
        int buttonHeight = frame.getHeight()/4;
        int xButton = (frame.getWidth() - buttonWidth)/2;
        int yButton = frame.getHeight()/2;
        button = new JButton("NEXT LEVEL!");
        button.setFocusable(false);
        button.setEnabled(true);
        button.setBounds(xButton, yButton, buttonWidth, buttonHeight);
        contentPane.add(button);

        int x = (screenSize.width - frame.getWidth())/2;
        int y = (screenSize.height - frame.getHeight())/2;
        frame.setLocation(x, y);
        frame.setVisible(true);
        glassPane.setVisible(true);
    }
}

我会尝试将 MouseListener 添加到您的玻璃窗格中,并在所有鼠标事件上消耗该事件,例如

public void  mouseClicked(MouseEvent e) {
    e.consume();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

glassPane 不阻止输入 的相关文章

随机推荐

  • Robot.mouseMove 未正确移动到指定位置

    每当我运行mouseMove当向机器人发出命令时 鼠标并不总是到达相同的位置 例如 我有以下代码 import java awt Robot import java util concurrent TimeUnit public class
  • MySQL 全文搜索是如何工作的?

    我非常清楚如何使用 MySQL 实现全文搜索 我知道如何添加索引 进行查询并对结果进行排序 但我一直在尝试获取一些有关其工作原理的更深入的信息 以便了解幕后发生的事情 MySQL 如何确定结果相关性 分数到底意味着什么 可以达到从 0 1
  • 如何在 OSGi 中实现 ManagedServiceFactory?

    我目前正在尝试设置我自己的实现ManagedServiceFactory 这就是我想要做的 我需要在每个配置的基础上使用某些服务的多个实例 在 DS 中 组件工作得很好 但现在我发现这些服务应该根据某些外部资源的可用性来处理自己的生命周期
  • 推送大型 github 存储库失败,并显示“无法推送到不合格的目的地:master”

    我有一个大型 git 存储库 从 SVN 存储库创建 我想将其推送到 github 鉴于它很大 我不能尝试直接推送它 因为它会因 打包太大 错误而失败 到目前为止一切都很好 我可以一次推送一个提交 但当我尝试这样做时 发生的事情是 git
  • 内容脚本中的 IFrame。如何与main.js通信?

    我的 Firefox 插件从内容脚本 page mod 打开 Fancybox 类型 iframe 在 Fancybox 中我显示了我自己的 HTML 页面 my fancybox stuff html 位于我自己的服务器中 现在 从my
  • 获取指向成员 std::string::size 的指针无法与 libc++ 链接,但可以与 libstdc++ 一起使用

    我正在做一个需要使用 libc 的项目 我遇到了以下问题 当我尝试编译以下代码时 include
  • 用于将复制集本地备份到 Windows Server 的 MongoDB 脚本

    我想通过 Windows 2012 服务器运行的复制集对 MongoDB 进行每日备份 最终目标是获取每日备份并将备份写入远程或本地共享 Windows 我可以批处理 mongodump 命令吗 任何帮助将不胜感激 抱歉 有点晚了 但以下内
  • 使用 hdiutil 或其他工具向 DMG 添加背景图像/颜色? [复制]

    这个问题在这里已经有答案了 可能的重复 如何使用命令行工具为 Mac OS X 创建美观的 DMG https stackoverflow com questions 96882 how do i create a nice looking
  • 指定的任务可执行位置......csc.exe无效错误

    我有一个关于 TFS 的项目 它可以在除了我的机器之外的其他人的机器上运行 构建时 我收到图像中可以看到的错误 指定的任务可执行位置 csc exe 无效 目前正在尝试修复 VS 2017 根据该消息 似乎csc exe已经损坏 只需尝试以
  • 允许唤醒计时器 Windows 7/Vista

    我需要允许唤醒计时器 计算机从睡眠 休眠状态唤醒 以将所有电源计划设置为已启用 我尝试了 Win32 PowerSetting 但它只适用于英文版的 Windows 我需要使用 NET 2 0 感谢您的回复 我怀疑您可以使用对 powrpr
  • Rust 参考在仍然借用的情况下被丢弃在这里

    问题 我从一个方法中收到 XXXXXXX 在仍借用时被丢弃 错误 其中 XXXXXXX 在方法结束时有效 这很好 但 Rust 不必要地期望它与输入引用一样长因为它们有明确的生命周期 这是一些设置信息 我有一个结构 其中迭代文本内容中所有找
  • 无法使用 Directus v8 API 获取临时令牌

    我正在使用最新的 Directus v8 版本 我安装了它并用它来设计我的架构 一切似乎都正常 但是当我尝试获取临时令牌来验证用户身份时 我收到一个关于未授权的奇怪错误 同时 AUTH 端点没有不需要先前授权的用户 显然 我的 Direct
  • WhitePages API 的替代方案? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 WhitePages API developer whitepages com 来获取电话类
  • PHP 中的 AWS Cloudfront SetCookie

    我正在尝试设置 cookie 以查看来自 AWS Cloudfront 的私有内容 http docs aws amazon com AmazonCloudFront latest DeveloperGuide private conten
  • 应用程序启动期间的键盘修改器

    我想捕获在应用程序启动期间是否按下了修改键 以确定全屏或窗口化 在主窗口构造函数中 我尝试检查键盘 修饰符 http msdn microsoft com en us library system windows input keyboar
  • JavaScript 的日期范围限制

    有两个文本类型的输入字段 用于以 mm dd yyy 格式写入开始日期和结束日期 我需要一个 JavaScript 函数来检查输入日期之间的日期范围间隔是否不超过 14 天 并且最大日期应该是当前日期 有没有插件或快速解决方案 我尝试使用
  • 调整大小之前传单地图无法正确显示

    我在 Binding scala 上使用带有 scalajs leaflet 外观的 Leaflet 并且地图初始化 显示不正确 为了重现这个问题 我准备了一个lihaoyi workbench页面类似于 scalajs leaflet 中
  • JQuery UI:在可放置放置时取消可排序

    我正在使用 JQuery 1 5 1 和 JQuery UI 1 8 11 我已经为许多项目添加了可排序 这里的任务是允许拖动排序 这一切都很好 但我也想合并 droppable 以便该项目可以被拖放到 复制我 区域 那里的任务将是复制该项
  • 获取 Windows 服务中的计算机名称?

    在 NET Windows 服务 C 中 如何获取计算机名称 这是一个可靠的方法 还是应该将其包装在 try catch 中 看着那 这环境等级 http msdn microsoft com en us library system en
  • glassPane 不阻止输入

    我用 java 构建了一个小型 GUI 游戏 有时我使用 glassPane 暂时阻止所有鼠标输入 我以前使用过 glassPane 没有任何问题 但这次它不会阻止鼠标输入 因此 当 glassPane 启用时 我仍然可以按下 conten