2011-11-29 6 views
1

4 명이 체스 게임을하는 동안 문제가 발생했습니다. 2 개의 ImageIcon이 같은지 알 수가 없습니다. 나는 빨강, 파랑, 녹색 및 노란색 조각을위한 네 개의 배열을 가지고 있으며, 플레이어가 클릭 한 부분이 색상 배열의 조각과 일치하는지 확인하는 것이 나의 아이디어였습니다. 그러나 if if (colorIcon.equals (clickedIcon))와 같이 말하면 false를 반환합니다. .equals()가 참조를 참조하고 메모리에 새로운 공간을 만들고 있기 때문입니다. 그렇다면 두 개의 ImageIcon을 비교할 수있는 방법이 있습니까? reaading 주셔서 감사합니다!두 이미지 아이콘을 비교합니까?

+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 myImage = new ImageIcon(imgURL, description); 

당신이 가진 것 :

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

도움을 주셔서 감사합니다. 정확히 이런 식으로하지는 않았지만 자체 JLabel 클래스를 만들어서 작업했습니다. – D347th

+0

도움이 되니 기쁩니다 :) – GETah

+0

'String == String' 대신'String.equals()'를 사용하지 않아야합니까? – Bowi

0

.equals()은 동일한 메모리 참조를 참조하지 않습니다. 객체를 비교하는 방법입니다. 참조를 비교하는 것은 ==입니다.

+2

ImageIcon 클래스는 상속하지만'Object'의'equals' 메소드를 구현하지 않습니다. java doc에 따른'Object.equals'는 다음과 같습니다. "Object 클래스의 equals 메소드는 객체에 대해 가장 분별력있는 등가 관계를 구현합니다. 즉, null이 아닌 참조 값 x 및 y에 대해이 메소드는 true를 반환합니다. x와 y는 ** 같은 ** 객체 **를 참조합니다 (x == y는 값을가집니다). ** "그러므로,'equals'와'=='는 ImageIcon 클래스에서 똑같습니다. – GETah

+0

감사합니다. 그게 내가 의미하는 바 였어. – 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 
} 
관련 문제