Question

je suis tombé sur un problème alors que je fais un jeu d'échecs à 4 joueurs. Je ne peux pas voir si deux ImageIcons sont les mêmes. J'ai quatre tableaux pour les pièces rouges, bleues, vertes et jaunes et mon idée était de voir si ce morceau le joueur a cliqué sur une correspondance des morceaux dans leur tableau de couleurs. Toutefois, si je dis comme si (colorIcon.equals (clickedIcon)) elle retourne false. Je sais que c'est parce que equals () fait référence à la référence et je fais un nouvel espace dans la mémoire. Alors, est-il possible que je peux comparer deux ImageIcons? Merci pour reaading!

Était-ce utile?

La solution

Vous pouvez toujours faire:

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;
   }
}

Et utiliser cette classe au lieu d'une première ImageIcon

Au lieu d'avoir:

ImageIcon myImage = new ImageIcon(imgURL, description);

vous auriez:

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

Autres conseils

.equals() ne se réfère pas à la même référence de mémoire. Il est une méthode qui compare les objets; il == de qui compare les références.

Il est vraiment simple que cela:

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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top