Comparar dos iconos de imagen?
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!
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
}