关于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 image?
ImageIcon imageIcon
1.new ImageIcon(image);
2.imageIcon.getImage(image);
3.很可惜的,loadImage方法為protected,我們使用不到了。
ImageIcon的圖給Image
1.image = imageIcon.getImage();
總結
以上是生活随笔為你收集整理的关于Icon,Image,ImageIcon的简单的对比参考 上篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么笔记本电脑能玩吃鸡和穿越火线,推荐几
- 下一篇: 关于TCP/IP必须知道的几个基础问题