【问题标题】:Difference between Icon and ImageIcon?Icon 和 ImageIcon 的区别?
【发布时间】:2014-01-16 21:20:56
【问题描述】:
Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
ImageIcon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );

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

【问题讨论】:

  • 第一种方式告诉任何查看您的代码的人您将只使用来自 Icon 类的方法 - 也就是说,这个 Icon 恰好是 ImageIcon 的事实是与代码无关。这是可维护性的福音。这也意味着您可以将方法重构为更广泛有用的方法 - 传入 Icon 而不是 ImageIcon
  • Icon 是一个接口; ImageIcon 是实现该接口的类。这是另一个 SO 问题,它解决了为什么要声明一个变量以具有接口类型而不是具体类型的问题:stackoverflow.com/questions/3768869/…

标签: java swing icons awt imageicon


【解决方案1】:

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

第一个更好,因为这意味着您可以稍后将 ImageIcon 更改为 Icon 的另一个实现,而无需更改应用程序的其余部分。

【讨论】:

    【解决方案2】:
    它们的性质和应用是不同的。 Image 是表示图形图像的所有类的抽象超类。 ImageIcon 是使用 Image 作为其源的 Icon 接口的实现。
    将 Image 视为可以呈现的东西,将 ImageIcon 视为在调用其 paintIcon() 方法时将呈现为 Icon 的东西。

    引自here
    希望这就是你要找的东西;)

    【讨论】:

      【解决方案3】:

      您应该首先阅读JavaDocs for ImageIcon

      您会注意到ImageIcon 实现了Icon,这意味着它可以在任何需要Icon 的地方使用(例如JButtonJLabel),但它也提供了一种方法您可以获得Image 的实例,它允许您使用Graphics 绘制它,而无需Component 参考,Icon 需要此参考

      【讨论】:

        【解决方案4】:

        java-imageicon-vs-image-difference

        这是一个关于 image 和 imageicon 之间区别的线程,但在 cmets 中他们也谈论 Icon 等。也许这会有所帮助。

        【讨论】:

          【解决方案5】:

          两者相似,但第一个是最好的,因为 ImageIcon 是 Icon 而不是相反。当我说 ImageIcon 是 Icon ImageIcon 实现 Icon。

          【讨论】:

            猜你喜欢
            • 2011-12-31
            • 2015-04-14
            • 1970-01-01
            • 2011-10-06
            • 1970-01-01
            • 2021-05-28
            • 1970-01-01
            • 2012-06-08
            • 1970-01-01
            相关资源
            最近更新 更多