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



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/news/328682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端为什么拿不到本地运行的web工程数据

原因很简单 连接的是远程服务器的tomcat啊啊啊啊啊

道指mt4代码_剑指offer算法题052:正则表达式匹配

小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第…

.NET 程序集单元测试工具 SmokeTest 应用指南

Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试。一般地我们使用脚本来实现Smoke Test的自动化,可借用虚拟机的snapshot机制来保证干净的环境来进行Smoke Test,然后将测试好的程序集成到Con…

JavaFX将Node导出为图片

转载自 JavaFX将Node导出为图片在JavaFX中提供了一个很实用的功能。我们可以将任意节点截图导出。代码如下:WritableImage image mapCanvas.snapshot(new SnapshotParameters(), null); try { ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", fil…

要么干,要么滚,千万别混

原文来自网络,侵删! 公司里混日子的人,最终伤害的是自己!你混日子,就是日子混你,你自己是输家。 无论为谁打工,要为自己学东西,客观上为公司创造价值。 收获与投入成正比&#xff0c…

basemap安装_Python画地图逃不过的basemap「完全安装手册」 | 附下载

基础配置:Mac 2017 | Python3python虐我千百遍,我待python如初恋Python需要跳过的安装的坑太太太太多了!!!!!前段时间看《利用python进行数据分析》这本书,到可视化的部分,看着最后的例子地图挺酷炫的,跟着敲代码的过程…

秋招--持续更新

7月份 阿里 电话面试挂 高并发 多线程 8月16日 17:06 网易互娱一面跪 问题 树二叉树 堆排序 各种字符串处理

String与InputStream相互转换

转载自 String与InputStream相互转换1.String to InputStream String str "String与InputStream相互转换";InputStream in_nocode new ByteArrayInputStream(str.getBytes()); InputStream in_withcode new ByteArrayInputStream(str.getByt…

spring data jpa是什么?

spring data jpa是什么? 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jewelry008/article/details/76359516 Spring Data JPA能干什么 在开始之前,先举个简单的例子. 一张表user有三个字段&…

LINQ:进阶 - LINQ 标准查询操作概述

“标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法。大多数这些方法都在序列上运行&#xff0c;其中的序列是一个对象&#xff0c;其类型实现了IEnumerable<T> 接口或 IQueryable<T> 接口。标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询…

2020年日历电子版(打印版)_“温故知新”——2020年《故宫日历》(青少版)正式发布...

2020《故宫日历》(青少版)。供图2020《故宫日历》(青少版)。供图中新网北京10月28日电 (记者 冉文娟)由故宫出版社和新东方教育科技集团联合推出的2020年《故宫日历》(青少版)28日在故宫博物院正式发布。《故宫日历》是故宫博物院介绍故宫藏品、传播故宫文化的普及读物。此次故…

BufferedImage与byte[]互转

转载自 BufferedImage与byte[]互转一、需要用到的类java.awt.image.BufferedImage; javax.imageio.ImageIO; java.io.*;二、为什么要将BufferedImage转为byte数组在传输中&#xff0c;图片是不能直接传的&#xff0c;因此需要把图片变为字节数组&#xff0c;然后传输比较方便…

2016经典微小说:《轮回》

内容来源于&#xff1a;网络 多年前&#xff0c;每到清晨&#xff0c;她要送他去幼儿园前。他总是哭着对她恳求&#xff1a;“妈妈&#xff0c;我在家听话&#xff0c;我不惹你生气&#xff0c;求你别送我去幼儿园&#xff0c;我想和你在一起。” 急匆匆忙着要上班的她&#xf…

delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点

综合整理自&#xff1a;百度文库等向量自回归介绍&#xff1a;当我们对变量是否真是外生变量的情况不自信时&#xff0c;传递函数分析的自然扩展就是均等地对待每一个变量。在双变量情况下&#xff0c;我们可以令{yt}的时间路径受序列{zt}的当期或过去的实际值的影响&#xff0…

关于TCP/IP必须知道的几个基础问题

转载自 关于TCP/IP必须知道的几个基础问题描述一下TCP三次握手的过程 接下来我们根据下面这幅图来解释一下TCP三次握手。p.s: 每个箭头代表一次握手。第一次握手 client(客户端)发送一个SYN(seqx)包给server(服务器)&#xff0c;然后“期待”server的ACK回复。p.s: seq为sequ…

升讯威微信营销系统开发实践:(3)中控服务器的设计 .Net 还是 Java?

在上一篇文章中&#xff0c;简要介绍了升讯威微信营销系统的功能设计和架构设计&#xff0c;限于篇幅只能抛砖引玉&#xff0c;从本章节开始将围绕功能的设计和架构的设计进行详细的论述。 中控服务器的设计 在上文中&#xff0c;我们谈到需要一个中控服务器&#xff0c;用来维…

Java 虚拟机部分面试题

https://www.imooc.com/article/31018?block_idtuijian_wz https://www.imooc.com/article/31018?block_idtuijian_wz https://github.com/Snailclimb/Java_Guide https://github.com/Snailclimb/Java_Guide

linux 提取cpio_15. Linux提取RPM包文件(cpio命令)详解

在讲解如何从 RPM 包中提取文件之前&#xff0c;先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件&#xff0c;换句话说&#xff0c;cpio 命令可以从归档包中提取文件(或目录)&#xff0c;也可以将文件(或目录)复制到归档包中。归档包&#xff0c;也可称为文…

升讯威微信营销系统开发实践:(2)功能设计与架构设计

在上一篇中&#xff0c;我们详细分析了微信订阅号和服务号的区别&#xff0c;在本篇中&#xff0c;将进入正题&#xff1a;升讯威微信营销系统的功能设计及架构设计。 一、功能设计 1&#xff09;设计目标 ◇ 为微信服务号提供运营及管理所需的各种功能&#xff0c;包括微官网、…

解读分库分表中间件Sharding-JDBC

转载自 解读分库分表中间件Sharding-JDBC编者按】数据库分库分表从互联网时代开启至今&#xff0c;一直是热门话题。在NoSQL横行的今天&#xff0c;关系型数据库凭借其稳定、查询灵活、兼容等特性&#xff0c;仍被大多数公司作为首选数据库。因此&#xff0c;合理采用分库分表…