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

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();

时间: 2024-11-19 10:37:26

关于Icon,Image,ImageIcon的简单的对比参考的相关文章

达梦7的试用 与SQLSERVER的简单技术对比

达梦7的试用 与SQLSERVER的简单技术对比 达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库 地址:http://online.dameng.com/ 说实话,第一眼看到还是感到很高大上的,毕竟ORACLE.MYSQL.SQLSERVER都没有推出数据库试用的云平台 其实其他数据库也应该学习一下达梦,做一个平台让大家有机会学习自家的数据库知识,虽然现在这个时代下载安装包比较容易,不过提供一个平台也是有好处的 达梦数据库文档下载:http://f

vue之指令篇 ps简单的对比angular

这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precompile,postcompile之类的小型地雷... 这篇文章只看表象:何为指令?这里借助ng的解释来解释vue,就是当你的项目中,需要一些dom操作,并且MVMM自带的事件指令感觉麻烦的时候,可以把一些dom操作封装到一个公共方法,这就是指令,大概用在vue上也可以说个70%: 写法,vue: Vue.d

hibernate原理简单实现对比JDBC

hibernate作为orm模型的实现的一种,是java的对象模型和关系模型之间的桥梁,主要通过jdbc 的封装来达到操作数据库的目的,提供了一套相对全面的自动化的api.简单模拟一下hibernate的 运行原理,其实主要还是jdbc的使用,还是直接看看这个小例子 package com.tgb.cfl.hibernate; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverMa

ESXi内虚拟机带快照与不带快照的情况下简单性能对比.

1. 两个虚拟机配置相同都为2vCPU 8G内存 一个虚拟机内包含较多的快照且有内容梗概 一个虚拟机不包含快照直接只有一个虚拟机的vmdk磁盘文件 操作系统未windows server 2008r2 磁盘测试工具是HDtune 测试结果: 不带快照的机器: 带快照的机器: 简单发现 存取时间多个快照的虚拟机比没有快照的虚拟机多使用了50%的时间. 突发传输速率只有不带快照的虚拟机三分之一 CPU占用率是不带快照的占用几乎三倍. 简单测试认为快照对磁盘IO还是有非常大的影像的, 备注 两个虚拟机

【图像编辑】三款图像编辑软件Photoshop、AffinityPhoto、Gimp非专业简单横向对比

人的感知分为:视觉.听觉.嗅觉.味觉.触觉.视觉即是对光的强弱.颜色.鲜艳程度的感知.视觉在纸质上通过图像来表达,在计算机数字领域则通过图像(位图)和图形(矢量图)来表达,本文提及的三款软件均为图像(位图)编辑软件. 1.Photoshop(2020_21.0.1.47) 官网:https://www.adobe.com/cn/products/photoshop.html 官方直链:(需用官方下载器登录Adobe账户在线安装) *鉴于官方没有提供独立安装包,所有网上流传的安装包均由第三方提取的

easyui datebox范围设置日期对比参考 和easyui的datebox怎么禁止手动输入

今天的两个问题都是通过百度解决.百度大法好啊,没事多百度多谷歌,程序员自我学习之道! 首先,如何让easyui的开始日期在结束日期之前.有2个datebox,一个是开始日期,一个结束日期,结束日期要大于开始日期,那么需要自己写逻辑代码来实现,不能控制datebox的选择范围,只能重置. 代码: <script>        function onSelect(d) {        var issd = this.id == 'sd', sd = issd ? d : new Date($(

涨知识!5个简单直观的网页设计对比技巧

对比是视觉设计中非常常用以及常见的设计技巧之一,甚至我个人觉得对比是设计中最最重要的要点. 今天会给大家介绍5种直观简单的对比方法. 如果能熟练理解和掌握,相信会对大家的日常设计中起到非常大的作用和帮助. 现任数美互动创意总监,曾任职于IM2.0 DDB 新意互动 等国际4A广告公司,担任互动美术指导,资深互动美术指导. 1. 大小对比 首先我们先看几个事例. 大小对比通过突出应该突出的信息和内容,在功能上可以更好的突出内容,在设计形式可以形成不同的版式结构,更佳绝有设计感. 实例演示,我们如何

简单对比一下不同Windows操作系统在相同硬件配置的情况下浏览器js引擎的性能

最近部门进行Windows客户端的测试产品单点性能, 感觉不在通的windows版本以及浏览器内核的情况下性能可能有差异, 也一直没有找到一个比较好的对比工具, 今天用chrome的控制台简单测试了下js 的简单加法的性能对比. 使用的windows系统以及chrome的版本 win10 1709 x64 chrome 60 win7sp1      x64 chrome 62 Winxpsp3   x86  chrome49 (Chrome支持xp的最后一个版本) 使用的最简单的对比函数..

用Java画简单验证码

以下是具体代码: package com.jinzhi.tes2; import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.I