2011-11-29 139 views
1

我在製作4人棋牌遊戲時遇到了問題。我無法看到兩個ImageIcons是否相同。我爲紅色,藍色,綠色和黃色作品提供了四個陣列,我的想法是查看玩家點擊的顏色是否與他們的顏色陣列中的任何作品匹配。然而,如果我說如果(colorIcon.equals(clickedIcon))它返回false。我知道那是因爲.equals()引用了引用,並且我正在內存中創建新的空間。那麼有什麼辦法可以比較兩個ImageIcons?感謝您的回覆!比較兩個圖像圖標?

+5

你不應該比較ImageIcons。你有代表棋子的班級嗎?如果是這樣,你應該比較一下棋子的類型。如果您發現自己需要比較圖像圖標來解決問題,我認爲您的代碼中存在設計問題。 – gigadot

回答

1

你總是可以做到:

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

而且使用這個類來代替原始的ImageIcon

而是具有:

ImageIcon myImage = new ImageIcon(imgURL, description); 

你會:

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

感謝您的幫助,我沒有完全做到這樣的事情,但我創建了自己的JLabel類並與之合作。 – D347th

+0

很高興幫助:) – GETah

+0

不應該使用'String.equals()'而不是'String == String'嗎? – Bowi

0

.equals()不涉及相同的存儲器引用。這是一種比較對象的方法;它是==比較參考。

+2

ImageIcon類繼承,但沒有實現Object的'equals'方法。根據java doc,Object.equals是:「類Object的equals方法實現對象上最可能的等價關係;也就是說,對於任何非空引用值x和y,此方法返回true當且僅當x和y指** ** same **對象**(x == y的值爲true)。**「因此,'equals'和'=='對於'ImageIcon'類 – GETah

+0

完全相同。你就是我的意思.equals – D347th

0

它很簡單,因爲這:

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 
}