关于Icon,Image,ImageIcon的简单的对比参考 上篇
转载自 关于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的简单的对比参考 上篇相关推荐
- 关于Icon,Image,ImageIcon的简单的对比参考
其实就算是现在,我还是有不少地方概念模糊,但是下面的内容是是没有什么问题的.稍微介绍一下,或许有些地方我无法解释: 大部分内容都是查的Java SE 5.0 API Icon: Icon位于javax ...
- 信息抽取(五)实体命名识别之嵌套实体识别哪家强,我做了一个简单的对比实验
实体命名识别之嵌套实体识别哪家强 嵌套实体识别 实体矩阵构建框架 方法比较 GlobalPointer TPLinker Tencent Muti-head Deep Biaffine 实验结果 总结 ...
- JavaGUI编程 -- Swing之Icon、ImageIcon标签获取当前类同一级文件路径的资源
1. Swing之Icon.ImageIcon标签&获取当前类同一级文件路径的资源 1.1 Icon标签 这个是使用画笔画自己心怡的图标 示例: package GUI.Swing;impor ...
- arm服务器测评_某ARM服务器与X86服务器简单性能对比
某ARM服务器与X86服务器简单性能对比 发布时间:2019-01-07 11:22, 浏览次数:816 , 标签: ARM 某ARM服务器与X86服务器简单性能对比 目录 一. 概述.. ...
- 某ARM服务器与X86服务器简单性能对比
某ARM服务器与X86服务器简单性能对比 目录 一. 概述... 2 二. 服务器基本硬件资料:... 2 三. CPU 测试... 3 四. 内存测试 ...
- Asp.Net customErrors与httpErrors的区别 先看一下简单的对比
[转]Asp.Net customErrors与httpErrors的区别 https://www.cnblogs.com/TiestoRay/p/4723996.html 先看一下简单的对比 cus ...
- 家用NAS流媒体平台Plex、Kodi、VideoStation、Jellyfin简单使用对比
暂时没用过EMBY 简单测试对比的网络环境:家庭电信光纤宽带上传速率7M/s,外网IP-DDNS方式(国内域名),局域网千兆网卡,白群218+,6G内存 web.PC端上网方式,电信5G手机提供Wi- ...
- 协同办公系统(OA系统)选型对比参考
协同办公系统(OA系统)选型对比参考 2022年,在疫情不断干扰企事业单位正常办公的背景下,越来越多的企业开始依靠网络进行日常办公,居家办公成为一种必须.而国内的网络办公系统.工具,经过多年的发展,也 ...
- 2022年协同办公系统(OA系统)选型对比参考
2022年协同办公系统(OA系统)选型对比参考 2022年,在疫情不断干扰企事业单位正常办公的背景下,越来越多的企业开始依靠网络进行日常办公,居家办公成为一种必须.而国内的网络办公系统.工具,经过多年 ...
最新文章
- 同义词词林 java_基于同义词词林扩展版的词语相似度计算
- vert.x 结合JAX-RS
- turtle库绘制圆_Python绘画:应用Turtle库绘制“抖音艺术字”
- 真·抬头发票!| 今日最佳
- MCU为什么内部不集成晶振
- SuseLinux详解(2)——网络设置静态IP 网关 DNS的方法
- 使用Kotlin的Android菜单
- 自适应输出表格(ASP版)
- matlab2017安装完提示编译器,matlab2017a/b 编译器设置之无语神坑
- RS485应用电路及问题经验总结
- 无线通信模块的双卡单待
- 平面设计文字排版方式有哪些?设计师们收藏——黎乙丙
- 前端基础—— 选择器 、css
- 随笔记录使用DNK时遇到的几个问题
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2版本正式发布
- KeyTool 和 OpenSSL 相互转换 [转]
- RFID固定资产管理系统中的RFID标签的使用-新导智能
- [RK3399][Android7.1] Audio中的Ducking模式
- vue3-element-admin 后台管理系统模板
- Excel中金额小写转大写,职场小技能,值得学习
热门文章
- 「offer来了」快来关注这些性能优化问题
- 8种方法解决vue创建项目报错:command failed: npm install --loglevel error
- mysql already closed._java.sql.SQLException: Already closed.
- mysql 5.5 免安装_mysql 5.5.56免安装版配置方法
- [Spring5]IOC容器_Bean管理_工厂Bean
- A/B HDU - 1576 (逆元或拓展欧几里得或数学公式)多解法求大数结果
- 数据结构与算法--分治算法-最大子序列和问题
- tof摄像头手势识别_一种基于TOF手势识别的控制系统的制作方法
- Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化
- 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】