在什么情况下我想使用 ImageIcon 来表示图片文件而不是 Image 对象?我一直在搜索,我看到人们说在处理将成为 GUI 一部分的图像时你会使用 ImageIcon 对象,但我仍然不明白这意味着什么。换句话说,这两种对象类型之间的实际区别是什么?它们各自适合什么情况?
3 回答
AnImage
是表示图片数据模型的对象。AnImageIcon
是在屏幕上绘制 an 的 Swing 组件,Image
您必须为它提供适当Image
的绘制(通过传入现有的Image
或通过提供足够的信息来查找和加载图像)。
关系类似于 aString
和 a之间的关系JTextField
;一个是数据的表示,另一个是在屏幕上绘制数据的图形组件。
Image
是一个表示位图的对象:一组不同颜色的像素。
Icon
是一个可以绘制矩形图形的对象。由于它是一个界面(也是一个简单的界面),您可以想象许多不同类型的图标:绘制预定义的矢量图形、动态生成图像等。因此它是一种有用的抽象,被 Swing 组件(按钮、标签)。
ImageIcon
是一个对象,它是一个Icon
,但有一个Image
。也就是说 - 它根据特定图像绘制图形。
当您说“我为什么要使用 ImageIcon 而不是 Image”时,您错过了重点:实际上您使用的Image
是任何一种方式。
实现是不阻塞 Swing 线程。
从 URL、文件名或字节数组创建的图像使用 MediaTracker 预加载以监控图像的加载状态。
基本上,您可以为按钮设置 ImageIcon,而无需实际强制预先加载它。
这可以通过有一个非常大的图标并将 Frame 的图标设置为此图像来看到。一旦设置为可见,实际出现可能需要几秒钟。