[转]关于Icon,Image,ImageIcon的简单的对比参考
转自:http://blog.csdn.net/bcmissrain/article/details/7190886
其实就算是现在,我还是有不少地方概念模糊,但是下面的内容是是没有什么问题的。稍微介绍一下,或许有些地方我无法解释:
大部分内容都是查的Java SE 5.0 API
Icon:
Icon位于javax.swing包中,它是一个接口 public interface Icon,介绍为:一个小的固定大小的图片,通常用于装饰组件
有三个方法:
int getIconHeight();
int getIconWidth();
void paintIcon(Component c,Graphics g,int x,int y);
Icon木有用过,提到它是因为ImageIcon实现了Icon接口(ImageIcon还实现了Accessible,Serializable接口,不过这里不具体说明了)
ImageIcon:
ImageIcon位于javax.swing包中。可以根据Image绘制Icon(这句话很关键),可以使用MediaTracker预载图像(Image也可以)
构造方法不少,举几个常用的:
ImageIcon(Image image);
ImageIcon(String name);
ImageIcon(URL url);
主要方法:
int getIconHeight();
int getIconWidth();
void paintIcon(Component c,Graphics g,int x,int y);
image getImage();
void setImage(Image image);
protect void loadImage(Image image); 加载图像,并在图像已经加载后才返回
要给控件加图片的话,可以很轻松地
JLabel label = new JLabel(new ImageIcon("a.png"));搞定(这个是用来与后面的Image的加图片对比的);
Image:来自于java.awt包中,抽象类Image是表示图形图像的所有类的超类,必须以特定于平台的方式获取图像。
它的主要方法是:Image getScaledInstance(int width,int height,int hints)
hints为:指示用于图像重新取样的算法类型的标志,具体可用的几个参数如下:
SCALE_AREA_AVERAGING 使用 Area Averaging 图像缩放算法。
SCALE_DEFAULT 使用默认的图像缩放算法。
SCALE_FAST 选择一种图像缩放算法,在这种缩放算法中,缩放速度比缩放平滑度具有更高的优先级。
SCALE_REPLICATE 使用 ReplicateScaleFilter 类中包含的图像缩放算法。
SCALE_SMOOTH 选择图像平滑度比缩放速度具有更高优先级的图像缩放算法
我们生成Image对象时需要借助于Toolkit类的getImage方法,而生成Toolkit对象有两种方法,一是借助于Component类的getToolkit()方法,一是借助于Toolkit的静态方法getDefaultToolkit();
所以呢,如果要使用Image类来为组件添加图标的话有两种方法
一种是:
//该类继承了Component或其子类
Image image = getToolkit().getImage("a.png");
JButton jb = new JButton(new ImageIcon(image));
另一种:
Image image = new Toolkit.getDefaultToolkit().getImage("a.png");
JButton jb = new JButton(new ImageIcon(image));
那么,为什么不直接用ImageIcon呢?前者不是更简单吗?
是的,前者更简单。但是Image可以对图像进行加工(比如调节大小使图像变灰等等)。
举一个例子,使用一个大图片来设置为小按钮的背景图:
效果图如下:
我想看了上面的内容,关于Image和ImageIcon的区别您已经有所体会了吧。
关于他们的互相的转换,也希望大家能够记住,使用起来会相当顺手:
Image的图给ImageIcon
Image image
ImageIcon imageIcon
1.new ImageIcon(image);
2.imageIcon.getImage(image);
3.很可惜的,loadImage方法为protected,我们使用不到了。
ImageIcon的图给Image
1.image = imageIcon.getImage();
作为新手的我,最近在看《设计模式》,我想恐怕要过很久了,那个时候我们从设计的角度来看这三个类
今天差不多就说到这里吧。演示Image和ImageIcon使用的例子已经上传。
[转]关于Icon,Image,ImageIcon的简单的对比参考的更多相关文章
- JAVA 关于Icon,Image,ImageIcon的简单的对比参考 分类: Java Game 2014-08-14 17:08 210人阅读 评论(0) 收藏
转自:http://blog.csdn.net/bcmissrain/article/details/7190886 其实就算是现在,我还是有不少地方概念模糊,但是下面的内容是是没有什么问题的.稍微介 ...
- 关于Icon,Image,ImageIcon的简单的对比参考
Icon: Icon位于javax.swing包中,它是一个接口 public interface Icon,介绍为:一个小的固定大小的图片,通常用于装饰组件 有三个方法: int getIconHe ...
- 达梦7的试用 与SQLSERVER的简单技术对比
达梦7的试用 与SQLSERVER的简单技术对比 达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库 地址:http://online.dameng.com ...
- ESXi内虚拟机带快照与不带快照的情况下简单性能对比.
1. 两个虚拟机配置相同都为2vCPU 8G内存 一个虚拟机内包含较多的快照且有内容梗概 一个虚拟机不包含快照直接只有一个虚拟机的vmdk磁盘文件 操作系统未windows server 2008r2 ...
- vue之指令篇 ps简单的对比angular
这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...
- JS定时器实现函数节流和防抖 -简单实现对比 -适用地方
如题 (总结要点) 防止重复点击! 最近项目中遇见这个"函数抖动"的问题!快速点击前端xx按钮,造成数据多次加载进页面里,正常只显示10条数据,结果显示了20条数据,异常! 出现原 ...
- 【图像编辑】三款图像编辑软件Photoshop、AffinityPhoto、Gimp非专业简单横向对比
人的感知分为:视觉.听觉.嗅觉.味觉.触觉.视觉即是对光的强弱.颜色.鲜艳程度的感知.视觉在纸质上通过图像来表达,在计算机数字领域则通过图像(位图)和图形(矢量图)来表达,本文提及的三款软件均为图像( ...
- Java GUI界面补充总结(不定期补充)
一.Java中如何设置各类组件透明 感谢原文:https://kslsi.iteye.com/blog/2096608 补充:Frame透明:AWTUtilities.setWindowOpacity ...
- JAVA学习Swing章节按钮组件JButton的简单学习
package com.swing; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; ...
随机推荐
- D2JS 的数据绑定
D2JS 将数据绑定视为"对象-路径-渲染/收集 "组成.主要 DOM 元素和对象绑定,称为 d2js.root,非主要元素指定数据路径,通过路径定位到值,根据值可进行渲染或收集 ...
- HTML select 操作
今天遇到一个问题,就是想设置select的默认选择项.但是试了很多方法都不行: <fieldset data-role="contractstatus"> <la ...
- apk文件解析,学习笔记
Android 应用程序包文件 (APK) 是一种Android操作系统上的应用程序安装文件格式,其英文全称为 “application package file” . 如果懂得使用反编译工具,可以下 ...
- oracle - 创建数据库
在服务器端的oracle,用户有点差异,当 我通过 'sqlplus / as sysdba' 命令登陆后,并不能创建数据库,sysdba拥有最高的系统权限,登陆后是 sys,以as sysdba登录 ...
- session marked for kill处理oracle中杀不掉的锁
ora-00031:session marked for kill处理oracle中杀不掉的锁 一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长 ...
- Gprinter Android SDK V1.0 使用说明
佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...
- 设置tomcat启动超时,不会自动停止
tomcat启动时如果1000ms没有起来,服务就会自动停止.设置位置如下
- 数据库导出导入操作(expdp,impdp)
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用. 命令行: sqlplus/nolog connect username/password as sysd ...
- Deep Learning 学习随记(五)深度网络--续
前面记到了深度网络这一章.当时觉得练习应该挺简单的,用不了多少时间,结果训练时间真够长的...途中debug的时候还手贱的clear了一下,又得从头开始运行.不过最终还是调试成功了,sigh~ 前一篇 ...
- [转]Delphi I/O Errors
The following are the Windows API (and former DOS) IO errors, which are also the IO errors often ret ...