2012-06-06 47 views
0

我有幾個的JLabel,每個保持這樣一個ImageIcon:確定其中三個部分重疊的圖像被點擊

ImageIcon icon = new ImageIcon("path/to/image.jpg"); 
JLabel label = new JLabel(icon); 

這些圖象是在一個六邊形形狀.PNGs。六邊形「外」的邊緣(存在的冗餘部分使用矩形畫布)是透明的。 JLabels,如果圖像是按照in this example的順序排列的,所以總是存在三個干擾圖像。

由於在其他下方或上方沒有「可見」圖層,因此我想將「可點擊區域」定義爲可見圖層。什麼是最聰明的方式呢,還是有更優雅的解決方案?

回答

3

我能想到的三種解決方案針對此問題:

  1. 如果你的六邊形僅僅是「黑線」 - 你可以實現paintComponent和油漆Polygon秒。你將不得不提及他們。稍後 - 點擊鼠標時,你將不得不在形狀的組件和鼠標點。然後遍歷形狀調用contains爲他們每個人。您將失去使用此解決方案的佈局支持。
  2. 實現玻璃面板/層和調度鼠標事件到適當JLabel - 遍歷JLabel小號
  3. 這將是至少優選(因爲緊密耦合的) - 延伸JLabel和引用添加到相鄰的六角形部件。當點擊鼠標時,檢查這個組件是否應該「捕捉」這個事件。如果不是,則將該事件「轉發」給適當的組件。
+0

+1 for'contains()'。 – trashgod

+0

六邊形填充不同的圖像,所以不僅包含黑線,但我會嘗試其他解決方案。謝謝,我會在測試時給予反饋。 – Dennis

+0

我嘗試了你的第三個建議,它工作得非常好!再次感謝。 – Dennis

相關問題