我有一個JPanel
添加了一個網格JLabels
。我想要一個MouseListener
來收聽MouseEvents
,但JLabels
似乎是在阻止,並且在JLabel
所在位置點擊時沒有MouseEvent
觸發。如何聆聽兒童組件?
是否有一種可靠的方式來收聽組件的子項的MouseEvents
?
我有一個JPanel
添加了一個網格JLabels
。我想要一個MouseListener
來收聽MouseEvents
,但JLabels
似乎是在阻止,並且在JLabel
所在位置點擊時沒有MouseEvent
觸發。如何聆聽兒童組件?
是否有一種可靠的方式來收聽組件的子項的MouseEvents
?
MouseEvents被調度到爲它們啓用的最頂層(z順序)組件,該組件已經在其上註冊了mouseListener,或者在內部已經設置了eventMask來處理它們。雖然通常JLabel是透明的(因此事件應該到達底層面板),但它們可能會通過f.i獲得事件不透明。設置一個工具提示。
在jdk 7中,您可以use a JLayer掌握所有(鼠標)傳遞給其子女的事件。的JLayer
文檔說:
JLayer是一個很好的解決方案,如果你只需要做的風俗畫過 複合成分或將其從子捕捉輸入事件。
它的前身jdk6是在SwingLabs中的JXLayer project。還有一種選擇是使用AWTEventListener,如Rob's blog(注意:可能不允許在安全受限的上下文中)中所述。
非常感謝您解釋清楚的答案。我對每個JLabel都有工具提示,我甚至沒有想到這一點。 –
肯定是最好的和最重要的關於這個話題的答案 - 謝謝。 – Balder
無論何時添加組件,父節點是否可以將自己添加爲偵聽器? –