图标(Icon)和图像图标(ImageIcon)之间的区别是什么?

7
Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
ImageIcon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );

这两者有什么区别?我的书总是使用第一行的方式声明一个ImageIcon,但是用第二种方式声明不是更好吗?因为它更具体地是一个ImageIcon

1
第一种方法告诉任何查看您代码的人,您只会使用Icon类中的方法 - 也就是说,这个Icon恰好是一个ImageIcon对于代码来说是无关紧要的。这是可维护性的福音。这也意味着您可以将重构成更广泛有用的方法 - 其中您传递一个Icon而不是一个ImageIcon - Dawood ibn Kareem
2
Icon是一个接口;ImageIcon是实现该接口的类。下面是另一个SO问题,讨论了为什么要声明变量具有接口类型而不是具体类型的问题:https://dev59.com/9m865IYBdhLWcg3wivCi - ajb
5个回答

6

Icon 是一个接口,而 ImageIcon 是该接口的一种实现。

使用 Icon 更好,因为这意味着您可以将 ImageIcon 更改为其他 Icon 实现,而无需更改应用程序的其余部分。


1
它们的本质和应用是不同的。Image是表示图形图像的所有类的抽象超类。ImageIcon是Icon接口的一个实现,它使用Image作为其源。
将Image想象为可以呈现的东西,而ImageIcon则是在调用其paintIcon()方法时将呈现为图标的东西。
引用自这里
希望这是您所需要的;)

1

您应该先阅读一下JavaDocsImageIcon 部分。

您会注意到,ImageIcon 实现了 Icon 接口,这意味着它可以在任何期望 Icon 的地方使用(例如 JButtonJLabel),但是它还提供了获取 Image 实例的方法,使您可以使用 Graphics 进行绘制,而无需 Component 引用,Icon 需要此引用。


0

这两个很相似,但第一个是最好的,因为ImageIcon是Icon,但反过来不一定成立。当我说ImageIcon是Icon时,ImageIcon实现了Icon。


0

看看Java ImageIcon vs Image 差异

这是一个关于图像和图标之间差异的讨论,但在评论中他们也谈到了图标等。也许这会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接