Java既有Image类又有Icon类。我经常看到的这些实现是ImageIcon,它将它们合并。但为什么有图像和图标的单独类?不是一个图标只是一种图像吗?
答案 0 :(得分:2)
Altough有相似之处,Icon和Image有完全不同的用例。可以使用图像代替图标,但不能使用图标代替图像。
Icon只有三种方法,除了查询它的标称大小并告诉它将自己绘制到Graphics目标之外,没有任何你可以用Icon做的事情。从头开始实现一个图标很简单,因为它有一个目的:表示可以绘制的矩形边界某些。
另一方面,图像虽然它本身没有暴露太多方法,但是方法暴露了更复杂的API。例如getGraphics() - 方法,它为您提供了一个巨大的API来将绘制到图像中。从头开始实现图像并非易事,因为它提供了许多功能。图像本身可以绘制,但它也可以绘制为。
将Icon视为表示Icon的最简单界面,而Image是操作图像的工具。没有理由要求所有来自Image的行李用于表示图标的简单任务。这使您可以自由地使用任何图标,它易于实现(例如)用于选择不基于实际图像的颜色的图标(只需创建自己的ColorIcon,它采用颜色并使用该颜色进行绘制)。如果在任何地方实际接受Icon,那将会变得非常复杂,需要一个完整的图像。
你经常看到ImageIcon使用的原因是它非常易于使用(因此Icons的例子使用它),并且概念上使用可以用Icon的简单绘画程序创建的Image也非常简单。在大多数情况下,它可以完成创建者想要的,例如在按钮上显示一些符号/图标。
它不一定是最通用/最好的方法 - 如果您希望您的程序适应各种显示分辨率,可缩放矢量图像将是更好的选择(或至少多个不同大小的图像,动态选择)基于显示分辨率)。并且由于非常简单的Icon API,它可以轻松连接任何,可以将其绘制成用作Icon,允许您选择最适合您需求的表示。