小网站推荐,大企业网站制作及维护,国家高新技术企业图片,app网站公司名称转载自   关于Icon#xff0c;Image#xff0c;ImageIcon的简单的对比参考 上篇其实就算是现在#xff0c;我还是有不少地方概念模糊#xff0c;但是下面的内容是是没有什么问题的。稍微介绍一下#xff0c;或许有些地方我无法解释#xff1a;
大部分内容都是查的Java SE…转载自   关于IconImageImageIcon的简单的对比参考 上篇其实就算是现在我还是有不少地方概念模糊但是下面的内容是是没有什么问题的。稍微介绍一下或许有些地方我无法解释
大部分内容都是查的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还实现了AccessibleSerializable接口不过这里不具体说明了
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();