Pregunta

Me encontré con un problema mientras estoy haciendo un juego de ajedrez de 4 jugadores. No puedo ver si dos Imageicons son iguales. Tengo cuatro matrices para las piezas rojas, azules, verdes y amarillas y mi idea era ver si en qué pieza el jugador hizo clic en cualquiera de las piezas en su matriz de colores. Sin embargo, si digo como si (coloricon.equals (clickedicon)) devuelve falso. Sé que es porque .equals () se refiere a la referencia y estoy haciendo un nuevo espacio en la memoria. Entonces, ¿hay alguna forma de comparar dos Imageicons? ¡Gracias por Reading!

¿Fue útil?

Solución

Siempre puedes hacer:

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

Y usa esta clase en lugar de un Imageicon en bruto

En vez de tener:

ImageIcon myImage = new ImageIcon(imgURL, description);

Tendrías:

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

Otros consejos

.equals() no se refiere a la misma referencia de memoria. Es un método que compara los objetos; es == Eso compara las referencias.

Es realmente simple como esto:

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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top