分享

set Icon、set IconImage与set Image的区别

 lvwuka 2012-06-30

一、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


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可以对图像进行加工(比如调节大小使图像变灰等等)。

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

[java] view plaincopyprint?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();

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多