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(); } }