在什么情况下我想使用ImageIcon来表示图片文件而不是图片对象?我一直在寻找,我曾经看到有人说你在处理图像时会使用一个ImageIcon对象,但是我仍然不明白这一点的含义。换句话说,两种对象类型之间的实际区别是什么,它们各自适合什么情况?为什么使用ImageIcon而不是Image?
1
A
回答
2
Image
是一个表示位图的对象:不同颜色的像素数组。
Icon
是一个可以绘制矩形图形的对象。由于它是一个界面(也是一个简单的界面),您可以想象许多不同类型的图标:绘制预定义的矢量图形,动态生成图像等。因此它是一个有用的抽象,并被Swing组件(按钮,标签)。
ImageIcon
是一个对象,它是一个Icon
,但HAS-A Image
。那就是 - 它根据特定图像绘制图形。
当你说“为什么我应该使用ImageIcon而不是图像”时,你会错过这个观点:事实上,你正在使用一种Image
。
2
Image
是表示图片的数据模型的对象。 ImageIcon
是一个Swing组件,它在屏幕上绘制一个Image
,并且您必须提供相应的Image
以进行绘制(通过传入现有的Image
或为其提供足够的信息以查找和加载图像)。
该关系类似于String
和JTextField
之间的关系;一个是数据的表示,另一个是将其绘制在屏幕上的图形组件。
1
该实现不会阻塞Swing线程。
使用MediaTracker预装载从URL,文件名或字节数组创建的图像,以监视图像的加载状态。
基本上,你可以设置一个按钮的ImageIcon,而不需要事先强制它被加载。
这可以通过有一个非常大的图标和框架的图标设置为这个图像看到。一旦可见,实际显示可能需要几秒钟的时间。
相关问题
- 1. 为什么我应该使用JLabel而不是Image?
- 2. 为什么使用classmethod而不是staticmethod?
- 3. 为什么使用iconv_strpos而不是strpos?
- 4. 为什么使用registerDefaults:而不是setValue:forKey:?
- 5. 为什么使用TagBuilder而不是StringBuilder?
- 6. 为什么,而不是使用回调
- 7. 为什么使用结构,而不是
- 8. 为什么使用StringWriter而不是StringBuffer?
- 9. 为什么使用s:Line而不是mx:HRule?
- 10. 为什么使用SQLiteOpenHelper而不是SQLiteDatabase?
- 11. 为什么使用MapFragment而不是SupportMapFragment?
- 12. 为什么使用FloatBuffer而不是float []?
- 13. 为什么使用追加()而不是+
- 14. 为什么使用Number.parseInt而不是parseInt()?
- 15. 为什么使用JLE而不是JL?
- 16. 为什么使用isinstance()而不是type()?
- 17. 为什么使用NoSQL而不是RDBMS?
- 18. 为什么使用uImage而不是zImage
- 19. 为什么使用HTML而不是HAML?
- 20. 为什么使用leal而不是incq?
- 21. 为什么使用TCPDF而不是mpdf
- 22. 为什么使用DataSource而不是XADataSource?
- 23. 为什么使用'='而不是':='?
- 24. 为什么使用char []而不是String?
- 25. 为什么我的JButton不更新imageicon?
- 26. 为什么=而不是:?
- 27. $('#background .image img') - .image是什么意思?
- 28. 为什么不调用UIPinchGestureRecognizer,而scrollViewDidEndZooming是?
- 29. 为什么说零而不是停用?
- 30. contentDisposition附件,而不是内联使用image/tiff作为contentType