转自: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使用的例子已经上传。

JAVA 关于Icon,Image,ImageIcon的简单的对比参考 分类: Java Game 2014-08-14 17:08 210人阅读 评论(0) 收藏的更多相关文章

  1. Java中的日期操作 分类: B1_JAVA 2015-02-16 17:55 6014人阅读 评论(0) 收藏

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  2. 各种排序算法的分析及java实现 分类: B10_计算机基础 2015-02-03 20:09 186人阅读 评论(0) 收藏

    转载自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 另可参考:http://gengning938.blog.163.com/blog/sta ...

  3. ubuntu中安装jdk 分类: java 学习笔记 linux ubuntu 2015-07-06 17:49 74人阅读 评论(0) 收藏

    参考文献:ubuntu 13.04 安装 JDK 先去oracle官网下载jdk,这一段我就不赘述了. 下载好之后先解压,解压方式参见 linux常用的压缩与解压缩命令 ,解压之后,将文件剪贴至/us ...

  4. java面试和笔试大全 分类: 面试 2015-07-10 22:07 10人阅读 评论(0) 收藏

    2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...

  5. 线程之一:JAVA线程基础 分类: B1_JAVA 2013-10-10 12:48 662人阅读 评论(0) 收藏

    参考core java,马士兵视频 1.线程的基本概念 (1)一个线程是一个程序内部的顺序控制流.   (2)线程和进程 –每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大. –线程: ...

  6. JAVA 显示图片的简单源码 分类: Java Game 2014-08-14 10:10 77人阅读 评论(0) 收藏

    此代码的原理就是用JLabel来加载图片,再将JLabel放入JFrame中, package com.mywork; import javax.swing.ImageIcon; import jav ...

  7. JAVA swing中JPanel如何实现分组框的效果以及设置边框颜色 分类: Java Game 2014-08-16 12:21 198人阅读 评论(0) 收藏

    代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridLayout; import javax.sw ...

  8. Java 函数参数传递方式详解 分类: Java Game 2014-08-15 06:34 82人阅读 评论(0) 收藏

    转:http://zzproc.iteye.com/blog/1328591 在阅读本文之前,根据自己的经验和理解,大家可以先思考并选择一下Java函数的参数传递方式:  A. 是按值传递的?  B. ...

  9. JAVA 对象数组,加载图片实例 分类: Java Game 2014-08-14 16:57 80人阅读 评论(0) 收藏

    主函数: package com.mywork; import java.awt.Color; import java.awt.Image; import javax.swing.ImageIcon; ...

随机推荐

  1. 三、MongoDB的创建、更新和删除

    一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 概要 下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D( ...

  2. Spark基础排序+二次排序(java+scala)

    1.基础排序算法 sc.textFile()).reduceByKey(_+_,).map(pair=>(pair._2,pair._1)).sortByKey(false).map(pair= ...

  3. LotusPhp中配置文件组件LtConfig详解

    LotusPhp中配置文件组件LtConfig是约定的一个重要组成部分,适用于多个场景,多数的LotusPhp组件如数据库,缓存,RBAC,表单验证等都需要用到配置组件,LtConfig配置组件也是L ...

  4. onClick事件实现方式(打电话为例子)

    1.在button 中 android:onclick="call" 注意事项:①.方法的名字必须是call ②.区别大小写 ③.call方法必须接收一个View类型的参数 ④.方 ...

  5. Ruby处理二进制(未完成)

    https://practicingruby.com/articles/binary-file-formats http://stackoverflow.com/questions/16821435/ ...

  6. C#串口操作类,包括串口读写操作

    串口进行操作的类,其中包括写和读操作,类可设置串口参数.设置接收函数.打开串口资源.关闭串口资源,操作完成后,一定要关闭串口.接收串口数据事件.接收数据出错事件.获取当前全部串口.把字节型转换成十六进 ...

  7. SQLite判断某表是否存在

    SQLite判断表是否存在:其实很简单,只要查看sqlite_master表中是否存在这条数据就可以知道了.SELECT count(*) FROM sqlite_master WHERE type= ...

  8. Python 爬虫实例

    下面是我写的一个简单爬虫实例 1.定义函数读取html网页的源代码 2.从源代码通过正则表达式挑选出自己需要获取的内容 3.序列中的htm依次写到d盘 #!/usr/bin/python import ...

  9. php匿名函数小示例

    <?php //$fun = function($params){ // echo $params; //}; // //$fun('aa'); //例一 //在普通函数中定义一个匿名函数 // ...

  10. jquery方法回到顶部代码

    <style> /*默认样式,主要是position:fixed实现屏幕绝对定位*/ #gotoTop{display:none;position:fixed;top:75%;left:5 ...