2011-10-23 11 views
1

私はNETBEANSを使用しており、決定/ブール値に基づいて特定のアイコン/イメージを表示する必要があるいくつかのJLabelを持っています。私はすべてのJLabelのためにマウスリスナーを追加し、各自のコードをコピー&ペーストする必要はありません。むしろ、私は、JLabelの名前としてx、yを使い、x、yに基づいてアイコンを設定する方が好きです。私は何の問題XYを取得していないが)この(xy.setIcon(新しいイメージアイコン(ヒット)のような何かをする方法を見つけ出すように見えることはできません;。ここに私のコードですマウスクリックのx、yに基づいて動的にJLabelアイコンを変更します。

/** 
* Mathematical coordinates of player1Fleet. 
* Used to realign ships from Ship Class 
* for use on game board. 
*/ 
public void mouseClicked(MouseEvent e) { 
    Launch1(); 
} 
public void FleetP1() { 
    for (Ship s : player1Fleet) { 
     int size = s.getSize(); 

     for (int i = 0; i < size; i++) { 
      player1Ships.add((((s.getXCoordinate(i) + 1) * 45) + 90) + "" + (((s.getYCoordinate(i) + 1) * 45) + 180)); 

     } 
    } 
    // Verification of Math 
    System.out.println(player1Ships); 
} 

/** 
* Determine Hit or Miss based on location of Cross-hairs 
* for player 1/West on game board. 
* @return 
*/ 
//public boolean setStrike1(){ 
public boolean Launch1() { 
    w93.setIcon(null); 
    player1Ships.clear(); 
    FleetP1(); 
    boolean strike1 = false; 
    boolean Launch = false; 
    for (int i = 0; i < this.player1Ships.size(); i++) { 
     if (this.player1Ships.get(i).equals(LblCrossHairs.getX() + "" + LblCrossHairs.getY())) { 
      strike1 = true; 
      //break; 
     } 
     if (strike1) { 
      strike1 = true; 
      (LblCrossHairs.getX() + "" + LblCrossHairs.getY()).setIcon(new ImageIcon(Hit)); 
      //Launch = theAttack.Strike1(strike1); 
      //w93.setIcon(new ImageIcon(Hit)); 
      URL url = this.getClass().getResource("MissleHit.au"); 
      AudioClip ac = Applet.newAudioClip(url); 
      ac.play(); 
      System.out.println("HIT"); 
      break; 
     } else { 
      strike1 = false; 
      (LblCrossHairs.getX() + "" + LblCrossHairs.getY()).setIcon(new ImageIcon(Hit)); 
      //w93.setIcon(new ImageIcon(Miss)); 
      URL url = this.getClass().getResource("MissileMiss.au"); 
      AudioClip ac = Applet.newAudioClip(url); 
      ac.play(); 
      System.out.println("MISS"); 
     } 
    } 
    TxtClick.setText(LblCrossHairs.getX() + "" + LblCrossHairs.getY() + ".setIcon"); 
    return strike1; 
} 

すべてのあなたのために事前にありがとうございます助ける。これは私がすべてのJLabelのためのマウスリスナーを追加し、各1のコードをコピー&ペーストする必要がありますする必要はありません最後の2日間

+2

*あなたの*あなたの質問は何ですか?あなたの質問は何ですか?*すぐに役立つようにするには、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

2

のための狂気私を運転されています。

別のリスナーを作成する必要はありません。同じリスナーをevと共有することができますエリJLabel。基本コードは

public void mouseClicked(MouseEvent e) 
{ 
    JLabel label = (JLabel)e.getSource(); 
    label.setIcon(...); 
} 
+0

+1正確です。関連する例がここにあります(http://stackoverflow.com/questions/5136859/mouselistener-help-java/5137250#5137250)。 – trashgod

+0

私はLaunch1メソッドでそれを使用したいと思っていますが、私がそれを使用したときにエラーが発生します。シンボルを見つけることができませんシンボル:変数e場所:クラスgame.GUI次の場合、 public boolean Launch1(label e)ラベルに対してのみ同じエラーが発生します。 – user1009629

+0

Launch1(...)メソッドにラベルをパラメータとして渡します。 – camickr

関連する問題