Вопрос

Я столкнулся с проблемой, пока я делаю игру с 4 игроками. Я не могу увидеть, одинаковы ли два изображения. У меня есть четыре массива для красных, синих, зеленых и желтых кусочков, и моя идея заключалась в том, что на какую часть нажимал игрок на любую из частей в своем цветовом массиве. Однако, если я скажу, что если (coloricon.equals (clickedicon)) он возвращает false. Я знаю, что это потому, что. Equals () относится к ссылке, и я делаю новое пространство в памяти. Так есть ли способ сравнить два изображения? Спасибо за Reaading!

Это было полезно?

Решение

Вы всегда можете сделать:

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");

Другие советы

.equals() не относится к той же ссылке на память. Это метод, который сравнивает объекты; это == это сравнивает ссылки.

Это действительно просто так:

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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top