2012-11-02 31 views
3

我有一個MouseListener設置和獲取在JLabel對象具有的MouseListener

label.addMouseListener(new ClickController()); 

在行動執行JLabel

class ClickController{ 
... 
public void mouseClicked(MouseEvent me) { 
     // retrieve Label object 
} 

有沒有什麼辦法的對象關聯與JLabel,所以我可以從mouseClicked方法內訪問它?

編輯:

下面給出更說明性的例子,我所要做的是在這裏設置的JLabel作爲撲克牌圖形表示。該標籤旨在表示具有所有實際數據的對象卡。所以我想將該Card對象與JLabel相關聯。

解決方案:

爲 '氣墊船全鰻魚' 建議,me.getSource()是要走的路。在我的具體情況是:

Card card = new Card(); 
label.putClientProperty("anythingiwant", card); 
label.addMouseListener(new ClickController()); 

,並從聽者拿到卡對象:

public void mouseClicked(MouseEvent me) { 
    JLabel label = (JLabel) me.getSource(); 
    Card card = (Card) label.getClientProperty("anythingiwant"); 
    // do anything with card 
} 
+0

你問的是如何從mouseClicked方法中獲取點擊標籤?如果沒有,請詳細說明。 –

+1

更新後的卓越想法,但更好的幫助更快發佈[SSCCE](http://sscce.org/) – mKorbel

+0

感謝mKorbel,我會按照您的意見 – TMichel

回答

5

您可以通過調用的MouseEvent所有的MouseListener和MouseAdapter方法返回getSource()輕鬆獲得點擊的對象。如果MouseListener被添加到多個組件中,則單擊一個將以這種方式返回。

public void mousePressed(MouseEvent mEvt) { 
    // if you're sure it is a JLabel! 
    JLabel labelClicked = (JLabel) mEvt.getSource(); 
} 

注:我通常喜歡使用mousePressed()方法在mouseClicked(),因爲它是小於「輕佻」,將寄存器的壓即使在壓制之後和釋放之前移動鼠標。

+0

您指出我正確的方向。非常感謝 – TMichel

+0

@TMichel:不客氣!但是也要仔細看看JB Nizet的建議,因爲它會讓你朝這個方向更進一步。 –

1

當然,一個簡單的方法是創建在ClickController一個構造函數,參加了一個JLabel。然後,您可以訪問對象內的特定JLabel。例如:

class ClickController{ 
    private JLabel label; 
    public ClickController(JLabel label){ 
     this.label = label; 
    } ... 
    public void mouseClicked(MouseEvent me) { 
     label.getText()//Or whatever you want 
    } 
} 
2

您可以簡單地使用Map<JLabel, Card>(如果您想從標籤中獲取卡片)或Map<Card, JLabel>(如果您想從卡片中獲取標籤)。

+0

哦,這是絕對明顯的,現在你說:)我想我可以同時使用氣墊船和你的解決方案,取決於情況。非常感謝 – TMichel

相關問題