为什么 Java 有图像 class 和图标 class?
Why does Java have both an Image class and an Icon class?
Java 有图像 class 和图标 class。我最常看到的这些实现是ImageIcon,它将它们合并。但是为什么图像和图标有单独的 classes 呢?图标不就是一种图像吗?
虽然有相似之处,但 Icon 和 Image 有完全不同的用例。可以用图片代替Icon,但不一定用Icon代替Image。
Icon 只有三种方法,除了查询 Icon 的标称大小并告诉它将自己绘制到 Graphics 目标之外,您无法对 Icon 执行任何操作。从头开始实现一个图标很简单,因为它只有一个目的:表示一个可以绘制的矩形边界 东西。
另一方面,Image 虽然它本身并没有公开太多方法,但它有公开更多、复杂 API 的方法。例如 getGraphics() 方法,它可以让您获得巨大的 API 来绘制 到 图像中。从头开始实现图像并非易事,因为它提供了许多 功能。图像本身可以被绘制,但它也可以被绘制到。
将 Icon 视为表示 Icon 的最简单界面,而 Image 是用于操作图像的工具。没有理由要求来自 Image 的所有包袱来完成表示图标的简单任务。这使您可以自由地为图标使用任何东西,它易于实现(例如)用于选择颜色的图标而不是基于实际图像(只需创建您自己的 ColorIcon,它采用一种颜色并使用该颜色绘制)。如果在实际接受图标的所有地方都需要完整的图像,那将变得非常复杂。
您经常看到 ImageIcon 的原因是它使用起来非常简单(因此图标示例使用它),并且在概念上使用可以通过简单的图标绘画程序创建的图像也非常简单.在大多数情况下,它完成了创建者想要的,例如在按钮上显示一些 symbol/icon。
它不一定是最 generic/best 的方法 - 如果您希望您的程序优雅地适应各种显示分辨率,可缩放矢量图像将是更好的选择(或至少多个不同的图像大小,根据显示分辨率动态选择)。多亏了非常简单的图标 API,它可以轻松连接 任何可以绘制的东西 用作图标,让您可以选择最适合您需要的表示形式。
Java 有图像 class 和图标 class。我最常看到的这些实现是ImageIcon,它将它们合并。但是为什么图像和图标有单独的 classes 呢?图标不就是一种图像吗?
虽然有相似之处,但 Icon 和 Image 有完全不同的用例。可以用图片代替Icon,但不一定用Icon代替Image。
Icon 只有三种方法,除了查询 Icon 的标称大小并告诉它将自己绘制到 Graphics 目标之外,您无法对 Icon 执行任何操作。从头开始实现一个图标很简单,因为它只有一个目的:表示一个可以绘制的矩形边界 东西。
另一方面,Image 虽然它本身并没有公开太多方法,但它有公开更多、复杂 API 的方法。例如 getGraphics() 方法,它可以让您获得巨大的 API 来绘制 到 图像中。从头开始实现图像并非易事,因为它提供了许多 功能。图像本身可以被绘制,但它也可以被绘制到。
将 Icon 视为表示 Icon 的最简单界面,而 Image 是用于操作图像的工具。没有理由要求来自 Image 的所有包袱来完成表示图标的简单任务。这使您可以自由地为图标使用任何东西,它易于实现(例如)用于选择颜色的图标而不是基于实际图像(只需创建您自己的 ColorIcon,它采用一种颜色并使用该颜色绘制)。如果在实际接受图标的所有地方都需要完整的图像,那将变得非常复杂。
您经常看到 ImageIcon 的原因是它使用起来非常简单(因此图标示例使用它),并且在概念上使用可以通过简单的图标绘画程序创建的图像也非常简单.在大多数情况下,它完成了创建者想要的,例如在按钮上显示一些 symbol/icon。
它不一定是最 generic/best 的方法 - 如果您希望您的程序优雅地适应各种显示分辨率,可缩放矢量图像将是更好的选择(或至少多个不同的图像大小,根据显示分辨率动态选择)。多亏了非常简单的图标 API,它可以轻松连接 任何可以绘制的东西 用作图标,让您可以选择最适合您需要的表示形式。