如何比较两个图像图标?



基本上,我使用2张图像进行棋盘游戏类型,并且不时更改它, 所以我需要能够检查两个是否具有相同的图像图标。 例如,如果两者都使用资源文件夹中的"pirosfigura.png"。

public String malomcheck() {
String pirosicon=lblNewLabel.getIcon().toString();
String pirosfilenev = pirosicon.substring(pirosicon.lastIndexOf("/"  ) + 1);
String iconfilenev = labelhely_1.getIcon().toString();
String filenev = iconfilenev.substring(iconfilenev.lastIndexOf("/"  ) + 1);

if(filenev==pirosfilenev) {
lblJtkos.setText("piros malom.");
JOptionPane.showMessageDialog(null, "working");
return "lefutott";

}
return "notworking. very sad.";
}

顺便说一下,getIcon((.toString(( 的返回值是javax.swing.ImageIcon@cd7e8021 这是指我猜(?(的内存位置,因此每次运行和每个图像都是随机的,因此它似乎无法使用。

实现此目的的一种方法是保留自己的ImageIcon到文件的映射,以便无论何时加载ImageIcon,您都会将其作为键存储在Map中,并将其文件或某个符号名称/枚举作为值。这样,当您想比较imIc1imIc2时,您可以编写如下内容:

if (map.get(imIc1).equals(map.get(imIc2)) { ... }

或(如果您有描述性字符串值(

if (map.get(imIc1).equals("NOT_WORKING_ICON") { ... }

或(如果您使用的是枚举值(

if (map.get(imIc1) == NOT_WORKING_ICON ) { ... }

对我来说太奇怪了,以至于没有方法可以访问 Jlabel 用于图像的文件路径。

完全有道理。JLabel显示Icon

为什么 JLabel 应该知道或关心文件路径?

您可以自己实现Icon接口并为Icon进行自定义绘制。因此,并非所有图标都有文件路径。仅从文件创建图像图标。

文件名的属性属于ImageIcon

顺便说一下,getIcon((.toString(( 的返回值是javax.swing.ImageIcon@cd7e8021

Image piros=new ImageIcon(this.getClass().getResource("pirosfigura.png")).getImage(); 
celpont.setIcon(new ImageIcon(piros)); 

查看您正在使用的上述代码。

您区域从图像创建图标,因此文件信息丢失。

相反,您应该直接创建图像图标:

ImageIcon icon = new ImageIcon( this.getClass().getResource("pirosfigura.png") ); 
celpont.setIcon( icon ); 
System.out.println( celpont.getIcon() );

我相信ImageIcon会将文件名保存为ImageIcon的"描述"。看起来 toString(( 将返回描述。

最新更新