这个问题有什么解决办法吗?
我向 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/