2012-01-08 73 views
3

科貝爾先生是上死了,非常感謝您添加「無效」的鼠標監聽

我有一個鼠標監聽器上JPanel其正常工作。我試圖給JLabel添加一些滾動支持,但是當我將鼠標監聽器添加到JLabel時,JPanel的鼠標監聽器在標籤的鼠標監聽器接收事件時停止接收事件。

我只想添加一個鼠標監聽器到JLabel而不阻止其下的JPanel鼠標監聽器。謝謝。

獎金問題!我想做getComponentAt(Point p)並獲得組件的底部,而不是最頂端,有什麼建議嗎?我有一個解決方法,所以這部分並不重要,但我不喜歡解決方法。再次感謝。

+0

爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-01-08 02:53:26

+0

對於「獎金問題」,你應該有一個新的發佈。在同一篇文章中討論多個問題會變得很複雜。 – camickr 2012-01-08 03:18:20

+0

不用了,謝謝安德魯和卡米,這不是一個大問題,所以我只是把它加入以防萬一我能得到答案。 – Jeremy 2012-01-08 05:58:44

回答

3

請你JLabel移動/ dragable,在其他情況下,你的問題沒有讓我真正SENCE,因爲在層次最深JComponenet採取默認對焦/ MouseListeners,反正看SwingUtilities,也有方法可以返回到相對座標父

+0

謝謝。它是可移動的。我會跟隨你的鏈接。 – Jeremy 2012-01-08 05:55:47

+0

就是這樣。我嘗試過使用getComponent.getParent ....但當我拖出時我得到了NPE。有了這個,我可以拖出來,我不必讓父母處理拖動soooo yea,釘住它。 – Jeremy 2012-01-08 06:20:41

2

但是,當我將鼠標監聽器添加到JLabel時,JPanel的鼠標監聽器在標籤的鼠標監聽器接收事件時停止接收事件。

是的,這是鼠標事件處理的工作方式。只有具有偵聽器的第一個組件纔會收到該事件。繼續將組件層次結構傳遞給每個組件並不是非常有效。

我只想添加一個鼠標監聽器到JLabel而不會阻塞它下面的JPanel的鼠標監聽器。

您可以在連接到標籤的鼠標偵聽器中處理此事件,然後將事件重新分派到父面板。查看API中Component類的dispatchEvent(...)以獲取更多信息。