4

JLabelMouseListener

label.addMouseListener( new ClickController() );

実行するアクションはどこにありますか

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

マウスクリックメソッド内からオブジェクトにアクセスできるように、オブジェクトをJLabelに関連付ける方法はありますか?

編集:

よりわかりやすい例を挙げると、ここで私がやろうとしているのは、トランプのグラフィック表現としてJLabelsを設定することです。ラベルは、すべての実際のデータを含むオブジェクトカードを表すことを目的としています。そのため、そのCardオブジェクトをJLabelに関連付けたいと思います。

解決:

「HovercraftFullOfEels」が示唆me.getSource()するように、それが進むべき道です。私の特定のケースでは、次のようになります。

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

リスナーからCardオブジェクトを取得します。

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

3 に答える 3

6

getSource()すべてのMouseListenerメソッドとMouseAdapterメソッドで返されるMouseEventを呼び出すことで、クリックされたオブジェクトを簡単に取得できます。MouseListenerが複数のコンポーネントに追加された場合、クリックされたコンポーネントはこの方法で返されます。

すなわち、

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

注:私は通常、このmousePressed()方法を使用することを好みます。mouseClicked()これは、「スキッティ」が少なく、マウスを押した後、離す前にマウスが動いた場合でも、プレスを登録するためです。

于 2012-11-02T22:29:42.447 に答える
2

Map<JLabel, Card>単純に(ラベルからカードを取得する場合)、または(カードからラベルを取得する場合)を使用できMap<Card, JLabel>ます。

于 2012-11-02T22:34:38.313 に答える
1

確かに、簡単な方法の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
    }
}
于 2012-11-02T22:14:45.873 に答える