Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
ImageIcon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
这两者有什么区别?我的书总是使用第一行中的方式来声明ImageIcon
,但不是更好地将其声明为第二种方式,因为更具体地说它是ImageIcon
?
答案 0 :(得分:6)
Icon
是一个接口,而ImageIcon
是该接口的实现。
第一个更好,因为这意味着您可以在以后更改ImageIcon以用于Icon的其他实现,而无需更改应用程序的其余部分。
答案 1 :(得分:1)
它们的性质和应用是不同的。 Image是表示图形图像的所有类的抽象超类。 ImageIcon是Icon接口的一个实现,它使用Image作为其源。
可以将Image视为可呈现的内容,将ImageIcon视为在调用paintIcon()方法时将其呈现为Icon的内容。
引自here
希望这是你正在寻找的;)
答案 2 :(得分:1)
您应首先阅读ImageIcon
的{{1}}。
您会注意到ImageIcon
实施Icon
,这意味着它可以在预期Icon
的任何地方使用(例如JButton
和JLabel
示例)但它还提供了一种方法,您可以通过它获取Image
的实例,允许您使用Graphics
绘制它,而无需Component
引用,Icon
需要
答案 3 :(得分:0)
见 java-imageicon-vs-image-difference
这是一个关于图像和imageicon之间差异的线索,但在评论中他们也谈到了Icon等。也许这有帮助。
答案 4 :(得分:0)
两者都相似,但第一个是最好的,因为ImageIcon是Icon而不是相反。当我说ImageIcon是Icon时ImageIcon实现了Icon。