Domanda

mi sono imbattuto in un problema, mentre io sto facendo una partita a scacchi 4 giocatori. Non sono in grado di vedere se due ImageIcons sono gli stessi. Ho quattro matrici per i pezzi di rosso, blu, verde e giallo e la mia idea era di vedere se ciò pezzo il giocatore cliccato su abbinato uno qualsiasi dei pezzi nella loro gamma di colore. Tuttavia, se io dico, come se (colorIcon.equals (clickedIcon)) restituisce false. Lo so che è perché .equals () si riferisce al riferimento e sto facendo un nuovo spazio nella memoria. Quindi non v'è alcun modo per confrontare due ImageIcons? Grazie per reaading!

È stato utile?

Soluzione

Si può sempre fare:

public class MyImageIcon extends ImageIcon{
   String imageColor;
   // Getters and setters...  
   // Appropriate constructor here.
   MyImageIcon(Image image, String description, String color){
       super(image, description);
       imageColor = color;
   }
   @Override
   public bool equals(Object other){
      MyImageIcon otherImage = (MyImageIcon) other;
      if (other == null) return false;
      return imageColor == other.imageColor;
   }
}

E utilizzare questa classe invece di un'ImageIcon grezza

Invece di avere:

ImageIcon myImage = new ImageIcon(imgURL, description);

si avrebbe:

MyImageIcon myImage = new MyImageIcon (imgURL, description, "RED");

Altri suggerimenti

.equals() non si riferisce allo stesso riferimento memoria. E 'un metodo che mette a confronto gli oggetti; di essa la == che mette a confronto i riferimenti.

La sua davvero semplice come questo:

ImageIcon i=new ImageIcon("getClass().getResource("image.jpg");//this is the image you want to compare to jLabel's icon
if(jLabel1.getIcon().equals(i){
  //...do something
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top