Java JPanel 鼠标监听器对其组件不起作用

标签 java swing mouselistener

这个问题有什么解决办法吗?

我向 JPanel 添加了一个鼠标监听器,但该面板充满了覆盖 JPanel 整个区域的按钮。

示例(伪)代码:

Create JPanel
Set to GridLayout
Add 25 buttons (5x5 grid)
Add MouseListener to JPanel

鼠标监听器/鼠标移动监听器:

onMouseMove { print out X,Y co-ords of mouse }

在我到达 JPanel 容器的边缘之前,坐标永远不会打印出来,因为按钮挡住了它的其余部分。

如何使鼠标监听器在面板的所有组件上工作,而不必向每个组件添加监听器 - 或者我应该向每个组件添加监听器?

添加信息: 我正在尝试为触摸屏系统添加触摸手势(滑动面板会导致发生操作)。 我对自己识别手势非常有信心,但我确实在寻找一种“更好”的方法,而不是向每个组件添加监听器的副本(这对我来说更糟糕,因为组件正在发生变化)。

我将尝试将其添加到 glassPane 中...(此时 getRootPane() 给我 NullPointerException)

编辑: 我现在知道我正在尝试从 JPanel 中获取 getRootPane(),该 JPanel 不是根容器,这就是为什么我得到 null。我需要在主 JFrame 上执行此操作。

编辑2: 好的,我已经做到了(向主 JFrame 添加了玻璃 Pane ),起初我遇到了问题,因为我没有这样做:

myGlassPane.setVisible(true);

所以看起来它不起作用。但是一旦我这样做了,我所要做的就是将不透明标志设置为 false 以使其透明

myGlassPane.setOpaque(false);

现在我在按钮和所有内容上打印出 X、Y 坐标,但是按钮不起作用,因为它们上面有一个面板。

最佳答案

将监听器添加到面板和按钮。

关于Java JPanel 鼠标监听器对其组件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9794765/

相关文章:

Java boolean 值转换为 Object[][]

java - 循环浏览窗口中的颜色

java - 如果我有一个使用 mouselistener 的标签数组列表,那么单击标签时如何获取索引?

java - 带 mouseEvent 处理的 JPanel 边框

java传递JFrame可以接受吗?

java - AWT 中 MouseMotionListener 的 SWT 等价物是什么?

java - 我无法使用 Gson 库正确读取 JSON

java - android Activity 不会显示

java - 找不到带有表达式的组件?

java - 以编程方式在网页上下载动态图像