转载自   关于Icon,Image,ImageIcon的简单的对比参考 上篇

其实就算是现在,我还是有不少地方概念模糊,但是下面的内容是是没有什么问题的。稍微介绍一下,或许有些地方我无法解释:

大部分内容都是查的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可以对图像进行加工(比如调节大小使图像变灰等等)。

举一个例子,使用一个大图片来设置为小按钮的背景图:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;  public class ImageTest
{  public static void main(String[] args)  {  JFrame jf = new JFrame("图片测试");  MyPanel mp = new MyPanel();  jf.add(mp);  jf.pack();  jf.validate();  jf.setVisible(true);  }  }  class MyPanel extends JPanel
{  private JButton jb1 = null;  private JButton jb2 = null;  private Image image = getToolkit().getImage("play.png");  private ImageIcon imageIcon = new ImageIcon("play.png");  public MyPanel()  {  super();  jb1 = new JButton();  /*您只要注释掉这句话,就会发现这两者的效果是完全相同的*/  image = image.getScaledInstance(50,50,image.SCALE_DEFAULT);  jb1.setIcon(new ImageIcon(image));  jb2 = new JButton(imageIcon);  this.add(jb1);  this.add(jb2);  }  }  

效果图如下:

我想看了上面的内容,关于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();

关于Icon,Image,ImageIcon的简单的对比参考 上篇相关推荐

  1. 关于Icon,Image,ImageIcon的简单的对比参考

    其实就算是现在,我还是有不少地方概念模糊,但是下面的内容是是没有什么问题的.稍微介绍一下,或许有些地方我无法解释: 大部分内容都是查的Java SE 5.0 API Icon: Icon位于javax ...

  2. 信息抽取(五)实体命名识别之嵌套实体识别哪家强,我做了一个简单的对比实验

    实体命名识别之嵌套实体识别哪家强 嵌套实体识别 实体矩阵构建框架 方法比较 GlobalPointer TPLinker Tencent Muti-head Deep Biaffine 实验结果 总结 ...

  3. JavaGUI编程 -- Swing之Icon、ImageIcon标签获取当前类同一级文件路径的资源

    1. Swing之Icon.ImageIcon标签&获取当前类同一级文件路径的资源 1.1 Icon标签 这个是使用画笔画自己心怡的图标 示例: package GUI.Swing;impor ...

  4. arm服务器测评_某ARM服务器与X86服务器简单性能对比

    某ARM服务器与X86服务器简单性能对比 发布时间:2019-01-07 11:22, 浏览次数:816 , 标签: ARM 某ARM服务器与X86服务器简单性能对比 目录 一.       概述.. ...

  5. 某ARM服务器与X86服务器简单性能对比

    某ARM服务器与X86服务器简单性能对比 目录 一.       概述... 2 二.       服务器基本硬件资料:... 2 三.       CPU 测试... 3 四.       内存测试 ...

  6. Asp.Net customErrors与httpErrors的区别 先看一下简单的对比

    [转]Asp.Net customErrors与httpErrors的区别 https://www.cnblogs.com/TiestoRay/p/4723996.html 先看一下简单的对比 cus ...

  7. 家用NAS流媒体平台Plex、Kodi、VideoStation、Jellyfin简单使用对比

    暂时没用过EMBY 简单测试对比的网络环境:家庭电信光纤宽带上传速率7M/s,外网IP-DDNS方式(国内域名),局域网千兆网卡,白群218+,6G内存 web.PC端上网方式,电信5G手机提供Wi- ...

  8. 协同办公系统(OA系统)选型对比参考

    协同办公系统(OA系统)选型对比参考 2022年,在疫情不断干扰企事业单位正常办公的背景下,越来越多的企业开始依靠网络进行日常办公,居家办公成为一种必须.而国内的网络办公系统.工具,经过多年的发展,也 ...

  9. 2022年协同办公系统(OA系统)选型对比参考

    2022年协同办公系统(OA系统)选型对比参考 2022年,在疫情不断干扰企事业单位正常办公的背景下,越来越多的企业开始依靠网络进行日常办公,居家办公成为一种必须.而国内的网络办公系统.工具,经过多年 ...

最新文章

  1. 同义词词林 java_基于同义词词林扩展版的词语相似度计算
  2. vert.x 结合JAX-RS
  3. turtle库绘制圆_Python绘画:应用Turtle库绘制“抖音艺术字”
  4. 真·抬头发票!| 今日最佳
  5. MCU为什么内部不集成晶振
  6. SuseLinux详解(2)——网络设置静态IP 网关 DNS的方法
  7. 使用Kotlin的Android菜单
  8. 自适应输出表格(ASP版)
  9. matlab2017安装完提示编译器,matlab2017a/b 编译器设置之无语神坑
  10. RS485应用电路及问题经验总结
  11. 无线通信模块的双卡单待
  12. 平面设计文字排版方式有哪些?设计师们收藏——黎乙丙
  13. 前端基础—— 选择器 、css
  14. 随笔记录使用DNK时遇到的几个问题
  15. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2版本正式发布
  16. KeyTool 和 OpenSSL 相互转换 [转]
  17. RFID固定资产管理系统中的RFID标签的使用-新导智能
  18. [RK3399][Android7.1] Audio中的Ducking模式
  19. vue3-element-admin 后台管理系统模板
  20. Excel中金额小写转大写,职场小技能,值得学习

热门文章

  1. 「offer来了」快来关注这些性能优化问题
  2. 8种方法解决vue创建项目报错:command failed: npm install --loglevel error
  3. mysql already closed._java.sql.SQLException: Already closed.
  4. mysql 5.5 免安装_mysql 5.5.56免安装版配置方法
  5. [Spring5]IOC容器_Bean管理_工厂Bean
  6. A/B HDU - 1576 (逆元或拓展欧几里得或数学公式)多解法求大数结果
  7. 数据结构与算法--分治算法-最大子序列和问题
  8. tof摄像头手势识别_一种基于TOF手势识别的控制系统的制作方法
  9. Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化
  10. 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】