重写JFrame的paint()方法,使用ImageIcon类将图片绘制成Icon,然后通过ImageIcon对象获取窗体的大小,进而设置图片的大小,使其能够自适应屏幕
主程序类:Main
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import com.test.FrameUtil; //工具类,返回指定路径文件的图片对象
public Class Main extends JFrame{
private Image photo = FrameUtil.getImage("images/fav.jpg");
//重写paint()
public void paint(Graphics g){
ImageIcon i = new ImageIcon(photo);
i.setImage(photo.getScaledInstance(this.getWidth(),this.getHeight(),
Image.SCALE_AREA_AVERAGING)); //此处是重点,通过this获取窗体大小来设置图片
g.drawImage(i.getImage(), 0, 0, null); //绘制图片
}
//窗体初始化
public void launchFrame(String title){
this.setTitle(title);
this.setSize(500,300);
this.setLocationRelativeTo(null); //设置窗体居中显示
this.setVisible(true); //窗体可视化
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //控制窗体的关闭
}
public static void main(String[] args){
new Main().launchFrame("窗体");
}
}
用到的工具类:FrameUtil
package com.test;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class FrameUtil {
//工具类最好将构造器私有化
private FrameUtil() {
}
/**
* 返回指定路径文件的图片对象
* @param path
* @return
*/
public static Image getImage(String path) {
BufferedImage bi = null;
try {
URL u = FrameUtil.class.getClassLoader().getResource(path);
bi = ImageIO.read(u);
}catch(IOException e) {
e.printStackTrace();
}
return bi;
}
}
结果: