1. 程式人生 > >JAVA中如何設定圖片(圖示)自適應Jlable等元件的大小

JAVA中如何設定圖片(圖示)自適應Jlable等元件的大小

一、問題:

一個程式,元件上設定某個圖片作為圖示,因為的label(應該說是元件)已經設定了固定大小,
所以再開啟一些大圖片時,超過元件大小的部分沒顯示出來,而小圖片又沒填充完整個元件

二、解決這個問題,需要用到兩個類:

java.awt.Image類
javax.swing.ImageIcon類


1.java.awt.Image是個抽象類,這個過程中用到的引數和函式如下:
(1)static intSCALE_DEFAULT    表示預設的影象縮放演算法。
(2)public Image getScaledInstance(int width,int height,int hints)
建立此影象的縮放版本。返回一個新的 Image 物件,預設情況下,該物件按指定的 width 和 height 呈現影象。即使已經完全載入了初始源影象,新的 Image 物件也可以被非同步載入。
如果 width 或 height 為負數,則替換該值以維持初始影象尺寸的高寬比。如果 width 和 height 都為負,則使用初始影象尺寸。

引數:
width - 將影象縮放到的寬度。
height - 將影象縮放到的高度。
hints - 指示用於影象重新取樣的演算法型別的標誌。
返回:
影象的縮放版本。


2.javax.swing.ImageIcon類
(1)這兒用到這個建構函式:
ImageIcon(String filename)        根據指定的檔案建立一個 ImageIcon物件
(2)Image getImage()             返回此圖示的 Image。
(3)void setImage(Image image)   設定由此圖示顯示的影象。


三、關鍵性程式碼

JLabel jlb = new JLabel();	//例項化JLble
int width = 50,height = 50;	//這是圖片和JLable的寬度和高度
ImageIcon image = new ImageIcon("image/img1.jpg");//例項化ImageIcon 物件
/*下面這句意思是:得到此圖示的 Image(image.getImage());
在此基礎上建立它的縮放版本,縮放版本的寬度,高度與JLble一致(getScaledInstance(width, height,Image.SCALE_DEFAULT ))
最後該影象就設定為得到的縮放版本(image.setImage)
*/
image.setImage(image.getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT ));//可以用下面三句程式碼來代替
//Image img = image.getImage();
//img = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
//image.setImage(img);
jlb.setIcon(image);
jlb.setSize(width, height);

四、程式例項
/*java中設定圖片自適應Jlable的大小*/
package test1;

import javax.swing.*;
import java.awt.Image;

public class ImageSetTest extends JFrame {
	private JLabel jlb = new JLabel();
	private ImageIcon image;
	private int width = 400, height = 400;

	public ImageSetTest() {
		this.setSize(800, 600);
		this.setLayout(null);

		image = new ImageIcon("image/img1.jpg");
		// image.setImage(image.getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT));
		Image img = image.getImage();
		img = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
		image.setImage(img);
		jlb.setIcon(image);

		this.add(jlb);
		jlb.setSize(width, height);
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new ImageSetTest();
	}
}