这个问题的解决办法是什么?
我向 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)
EDIT:我现在知道我正在尝试从不是根容器的 JPanel 获取 getRootPane() ,这就是为什么我得到一个null
。我需要在主 JFrame 上执行此操作。
EDIT2:好的,我已经这样做了(在主 JFrame 中添加了玻璃窗格),起初我遇到了问题,因为我没有这样做:
myGlassPane.setVisible(true);
所以看起来它不起作用。但是一旦我这样做了,我所要做的就是将不透明标志设置为 false 以使其透明
myGlassPane.setOpaque(false);
所以现在我在按钮和所有东西上打印出 X、Y 坐标,但是按钮不起作用,因为它们上面有一个面板。