此问题的解决方案是什么?Java JPanel鼠标监听器无法在其组件上工作
我在JPanel中添加了一个鼠标监听器,但该面板中充满了覆盖JPanel整个区域的按钮。
实施例(伪)代码:
Create JPanel
Set to GridLayout
Add 25 buttons (5x5 grid)
Add MouseListener to JPanel
的MouseListener /的MouseMotionListener:
onMouseMove { print out X,Y co-ords of mouse }
共ORDS从不打印出来,直到我得到正确的JPanel的容器的边缘,这是因为按钮阻塞了其余部分。
如何让鼠标侦听器可以在所有面板组件上工作,而无需将侦听器添加到每个组件?或者我应该将侦听器添加到每个组件?
附加信息: 我正在尝试为触摸屏系统添加触摸手势(滑动面板会导致发生操作)。 我对自己认识手势非常有信心,但是我真的希望找到一种“更好”的方式,而不是将侦听器的副本添加到每个组件(对我来说,这会更糟糕,因为组件正在更改)。
我会尝试将其添加到的glassPane,而不是...(目前中的getRootPane()给我的NullPointerException)
编辑: 我现在知道,我想中的getRootPane( )从JPanel这不是根容器,这就是为什么我得到一个null
。我需要在主JFrame上执行此操作。
EDIT2: 好了,所以我已经做了(加玻璃板主JFrame的),首先我有一个问题,因为我没有做到这一点:
myGlassPane.setVisible(true);
所以似乎它不起作用。但是,一旦我做了所有我需要做的就是设置不透明标志设置为false,使其透明
myGlassPane.setOpaque(false);
所以,现在我得到的X,Y共同ORDS打印出来,在按钮和一切,但是按钮不起作用,因为它们上面有一个面板。
您可能不得不使用glasspane截取鼠标,然后让它将鼠标事件分派给下面的所有基础组件。 – 2012-03-20 20:57:03
不要为按钮使用'MouseListener'!一个'ActionListener'将响应鼠标和键盘的输入。 – 2012-03-20 21:05:25
嗨皮特:D。当我尝试'myPanel.getRootPane()时,我无法绕过'NullPointerException' ...'当我试图去玻璃板。 – Ozzy 2012-03-20 21:10:51