为什么 JPanel 下的 JButton 仍然有反应?

2024-03-23

我四处寻找我的问题,但找不到答案,所以我在这里:

我有一个 JLayeredPane,里面有 2 个 JPanel。 最深的(最下面)有 JButtons。 第二个(上面的那个)具有部分透明的背景颜色(尽管我认为这不会影响它)。

现在,当我将鼠标悬停在 JButton 上(位于另一个 JPanel 后面)时,它们仍然会向我添加到其中的 MouseListener 触发事件。我不知道为什么...

为什么会这样呢?我该怎么做才能让它停止?

在这里,我将两个面板添加到分层窗格中,这指的是扩展 JFrame 的类。

    JLayeredPane layer = this.getLayeredPane();
    layer.removeAll();

    this.gamePanel = new GamePanel(game);


    this.ghostPanel = new GhostPanel();
    this.ghostPanel.setOpaque(true);
    this.ghostPanel.setVisible(true);

    layer.add(this.gamePanel, new Integer(0));
    layer.add(this.ghostPanel, new Integer(1));

这里我有一些按钮(具有绝对布局)添加到最低面板

    this.setLayout(null);
    for (int j = 0; j < 5; j++) {
        for (int i = 0; i < 5 + j; i++) {
            this.add(this.buttons[i][j]);
        }
    }
    for (int j = 1; j < 5; j++) {
        for (int i = j; i < 9; i++) {
            this.add(this.buttons[i][4 + j]);
        }
    }

这里这个指的是最底层的JPanel

这个的目的是一个叫做 gipf 的游戏,我采用的布局是绝对的,因为很难将所有东西都排列成六边形。


现在,当我将鼠标悬停在 JButtons (位于其他 JPanel 后面)上时,它们仍然向我添加到其中的 MouseListener 触发事件

当生成的事件需要传递给组件时,Swing 从父/子层次结构的底部向上搜索,直到找到想要处理该事件的组件。

我该怎么做才能让它停止?

Add a MouseMotionListener到顶部面板来拦截诸如 mouseEntered/mouseExited 之类的事件。这样您仍然可以处理其他面板中的按钮单击。

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

为什么 JPanel 下的 JButton 仍然有反应? 的相关文章

随机推荐

  • 进程的页表是否映射到内核地址空间?

    我当时正在做 Windows 系统编程 想知道是否可以在源代码级别访问进程的页表 这是我所了解的与虚拟内存相关的页表 假设用户刚刚在 Windows 操作系统 32 位 上运行一个名为 A 进程的进程 首先 操作系统为A进程创建并维护4GB
  • ER 图中的 mysql 工作台列图标意味着什么?

    谁能帮我解释一下 MySQL Workbench 中创建的数据库 ER 图中的图标 蓝钻 实心 蓝钻 未填充 红钻等 Thanks 我在 MySQL 的网站上找到了这些资源 http dev mysql com doc workbench
  • 一个数组占用多少空间?

    如果我创建 10 个整数和一个 10 的整数数组 占用的总空间会有什么差异吗 我必须创建一个包含数百万条记录的布尔数组 所以我想了解数组本身将占用多少空间 整数数组表示为保存整数的内存块和对象头 对于 32 位 JVM 对象标头通常需要 3
  • 有修订的三重存储

    我需要存储 RDF 三元组 同时跟踪修改 有这项服务吗 或者 在使用上下文感知三重存储时如何跟踪修订 Edit 请注意 我不仅仅需要变更集 我还需要查看过去任何时间的三元组 我试图通过存储额外的三元组来解决这类问题 这些三元组描述了谁在何时
  • 为什么不能在函数中声明模板?

    Reading C 模板 完整指南 http www amazon co uk Templates Complete Guide David Vandevoorde dp 0201734842它说 请注意 模板不能被声明 在一个函数中 它不
  • Leanback 库支持 API 级别 19 Android for TV 应用程序吗?

    是否有针对 Android API 级别 19 的 Leanback 库支持 在这个链接中https developer android com reference android support v17 leanback package
  • 从 AudioBuffer 在 Node.js 中写入 wav 文件

    我是 Node js 编程新手 我正在尝试将 m4a 文件转换为 wav 文件 我使用了 audiobuffer to wav 和 web audio api 这是我的代码 const fs require fs const toWav r
  • Java接口和继承

    如果我们有 public interface Foo public class Bar implements Foo 之间有区别吗 public class BarBar extends Bar implements Foo and pub
  • 如何使用 AVFoundation 将视频转换为动画 gif?

    在使用 AVFoundation 和 AVCamRecorder 录制电影后 我正在推送一个新的 UIViewController 目前 我正在从保存电影的 URL 播放电影 效果很好 我在理解如何将视频从 URL 转换为动画 gif 时遇
  • 抑制已经遇到的列表元素

    您好 我有一个正在尝试编辑的速度模板 它目前有一个看起来像的块 foreach element in myList element field1 element field2 issued by element field element
  • 为什么bark方法无法调用

    class Animal void run class Dog extends Animal void bark class Testing public static void main String args Animal d new
  • Eclipse - 为现有项目设置 .classpath 文件

    我有一个java项目 来自其他人的 Eclipse 项目的工作文件夹 我认为这是一个 Repast Simphony 项目 在我的 Eclipse 中 我创建了一个新的 Java 项目并告诉它使用现有的代码 所以它似乎已经引入了所有代码 但
  • 将每周事件添加到日历

    我想向本地添加一个事件Calendar 在这里我想在每个Tuesday until 31 December 2015 btnWeekly setOnClickListener new OnClickListener Override pub
  • 如何使用 devtools install_github 从私人仓库安装 R 包?

    我正在尝试从我的 github 存储库安装示例包 https github com jpmarindiaz samplepkg 当存储库公开时 我可以通过 R 解释器使用以下任何命令来安装它 install github jpmarindi
  • 使用 Flexbox 将元素与底部对齐

    我有一个div和一些孩子 div class content h1 heading 1 h1 h2 heading 2 h2 p Some more or less text p a href class button Click me a
  • 如何向 ActiveRecord 添加新属性

    从模型中获取所有值后 我想向 ActiveRecord 类添加另一个自定义属性 该属性不是数据库中的列 以便我可以在视图中使用它 但 Rails 不允许我添加一个 我应该在其模型类中添加什么 test all test each do el
  • 尝试将 Firebase 添加到我的 Android 项目时,我遇到了 gradle 同步错误 JAVA_LETTER_OR_DIGIT

    当我按照 firebase 指南添加依赖项并同步项目时 出现错误 JAVA LETTER OR DIGIT 我使用 MAC OS X Yosemite 我的 android studio 版本是 3 1 4 我的应用程序成绩文件 apply
  • 如何将 std::unique_ptr 传递到函数中

    我怎样才能通过std unique ptr变成一个函数 假设我有以下课程 class A public A int val val val int GetVal return val private int val 以下内容无法编译 voi
  • 允许使用 HTMLPurifier 的 data-* 属性

    目前我将此代码与 HTMLPurifier 一起使用以允许data HTML标签属性 def config gt getHTMLDefinition true def gt addAttribute div data aaa Text de
  • 为什么 JPanel 下的 JButton 仍然有反应?

    我四处寻找我的问题 但找不到答案 所以我在这里 我有一个 JLayeredPane 里面有 2 个 JPanel 最深的 最下面 有 JButtons 第二个 上面的那个 具有部分透明的背景颜色 尽管我认为这不会影响它 现在 当我将鼠标悬停