此問題的解決方案是什麼?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