Java 如何比较两个图像图标?
基本上,我用2张图片做一个棋盘游戏,我会不时地改变它, 所以我需要能够检查两个是否有相同的图像图标。 例如,如果两者都使用resources文件夹中的“pirosfigura.png”Java 如何比较两个图像图标?,java,swing,jlabel,imageicon,Java,Swing,Jlabel,Imageicon,基本上,我用2张图片做一个棋盘游戏,我会不时地改变它, 所以我需要能够检查两个是否有相同的图像图标。 例如,如果两者都使用resources文件夹中的“pirosfigura.png” public String malomcheck() { String pirosicon=lblNewLabel.getIcon().toString(); String pirosfilenev = pirosicon.substring(pirosicon.lastIndexOf("
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
都将其作为键存储在映射中,并将其文件或某个符号名/enum作为值存储。这样,当您想要比较imIc1
和imIc2
时,您可以编写如下内容:
if (map.get(imIc1).equals(map.get(imIc2)) { ... }
或者(如果您有描述性字符串值)
或(如果使用的是枚举值)
对我来说,这太奇怪了,以至于没有方法可以访问Jlabel用于图像的文件路径
这很有道理。JLabel
显示一个图标
为什么JLabel应该知道或关心文件路径
您可以自己实现图标
界面,并为图标
进行自定义绘制。因此,并非所有图标都有文件路径。仅从文件创建图像图标
文件名的属性属于ImageIcon
顺便说一下,getIcon().toString()的返回值是javax.swing。ImageIcon@cd7e8021
请看您正在使用的上述代码
您需要从图像创建一个图标,因此文件信息丢失
相反,您应该直接创建ImageIcon:
ImageIcon icon = new ImageIcon( this.getClass().getResource("pirosfigura.png") );
celpont.setIcon( icon );
System.out.println( celpont.getIcon() );
我相信ImageIcon会将文件名保存为ImageIcon的“描述”。似乎toString()将返回描述。您在错误的位置处理此问题。你用来显示某物的图像只是显示器的一个人工制品。假设您正在使用一些数据来决定在每个标签中显示哪个图像图标:而是比较该数据。但是,也可以使用.equals
,而不是=
,来比较字符串。如果单击它,我会设置标签,“计算机”会设置另一个标签。我只是想比较一下图片,就这样。感谢.equals提示。我怀疑您是否能够可靠地使用getIcon().toString()
进行比较。您需要图像本身的一些不变量。如果从文件加载图像
,则可以比较每个图像的文件名。或者,您可以比较图像数据,您可能需要一个PixelGrabber
,因为我正在使用源文件夹中的两个文件。对我来说,这太奇怪了,以至于没有方法可以访问Jlabel用于图像的文件路径。
if (map.get(imIc1) == NOT_WORKING_ICON ) { ... }
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() );