一、問題:
一個程序,組件上設置某個圖片作為圖標,因為的label(應該說是組件)已經設定了固定大小, 所以再打開一些大圖片時,超過組件大小的部分沒顯示出來,而小圖片又沒填充完整個組件
二、解決這個問題,需要用到兩個類:
Java.awt.Image類 javax.swing.ImageIcon類
1.java.awt.Image是個抽象類,這個過程中用到的參數和函數如下: (1)static int SCALE_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();
- int width = 50,height = 50;
- ImageIcon image = new ImageIcon("image/img1.jpg");
- image.setImage(image.getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT ));
- jlb.setIcon(image);
- jlb.setSize(width, height);
四、程序實例
- 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 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();
- }
- }