Icon, ImageIcon & image

xiaoxiao2021-02-27  354

1 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接口,不过这里不具体说明了)


2 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的加图片对比的)

3 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 image ImageIcon imageIcon = new ImageIcon(image);//方法一 ImageIcon imageIcon = imageIcon.getImage(image);//方法二 //将ImageIcon的图给Image 1.image = imageIcon.getImage();

很可惜的是,loadImage方法为protected,我们使用不到了。

转载请注明原文地址: https://www.6miu.com/read-4464.html

最新回复(0)