用最少的代码实现JPanel的paint()画图功能

深入简出的实现窗口中画上图片,把代码压缩到最简单,帮助理解。


前言

`提示:

继承JPanel的类,重写paint方法。主要是关于如何让图片传入函数,怎么画出来图片。


一、介绍三种方法把图片传到函数中

这3中方法是个人觉得用的比较多,而且代码量非常少的方法。容易理解,好使用。
第一种方法:

Image image = Toolkit.getDefaultToolkit().getImage(pathName);

第二种方法:

image=ImageIO.read(new File(pathName));

第三种方法:

image=ImageIO.read(PaintTest.class.getResource(pathName));

二、详细介绍使用步骤

1.第一种方法

第一种方法最简洁,也是我最喜欢用的。绝对路径的可移植性差了一点。
代码如下:

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

public class CSDN extends JPanel {//继承JPanel类,为了重新paint方法
    public static void main(String[] args) {
    	JFrame jf=new JFrame();//创建一个窗口
		jf.setBounds(1200, 100, 474, 456);//设置窗口的位置以及大小
		jf.setTitle("paintObject");//设置窗口的标题
		PaintTest pt=new PaintTest();//初始化PaintTest类,同时得到pt对象。
		jf.add(pt);//把pt对象加到窗口中,就可以在窗口中画图
		jf.setVisible(true);//设置窗口可见。
    }

	@Override
	public void paint(Graphics g) {
		String pathName="D:\\Java_dm\\eclipse2021_workspace\\paintTest\\src\\4.jpg";///绝对路径
		Image image = Toolkit.getDefaultToolkit().getImage(pathName);
		g.drawImage(image, 0, 0,null);
	}
}

运行以后得到图形:
在这里插入图片描述
注释中对每一行的作用都做了解释。

2.第二种方法

同样使用了绝对路径,代码稍微多了一点,主要是要进行try catch破获异常。
代码如下:

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;

public class CSDN extends JPanel {//继承JPanel类,为了重新paint方法
    public static void main(String[] args) {
    	JFrame jf=new JFrame();//创建一个窗口
		jf.setBounds(1200, 100, 474, 456);//设置窗口的位置以及大小
		jf.setTitle("paintObject");//设置窗口的标题
		PaintTest pt=new PaintTest();//初始化PaintTest类,同时得到pt对象。
		jf.add(pt);//把pt对象加到窗口中,就可以在窗口中画图
		jf.setVisible(true);//设置窗口可见。
    }

	@Override
	public void paint(Graphics g) {
		String pathName="D:\\Java_dm\\eclipse2021_workspace\\paintTest\\src\\4.jpg";///绝对路径
		Image image = null;		
		try {
			image=ImageIO.read(new File(pathName));
		} catch (IOException e) {
			e.printStackTrace();
		}
		g.drawImage(image, 0, 0,null);
	}
}

运行后解脱:
在这里插入图片描述
没有外观上没有任何区别。

3.第三种方法

使用的是相对路径/代表的是src路径,可移植性较高,也是比较推荐的方法。
代码如下:

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;

public class CSDN extends JPanel {//继承JPanel类,为了重新paint方法
    public static void main(String[] args) {
    	JFrame jf=new JFrame();//创建一个窗口
		jf.setBounds(1200, 100, 474, 456);//设置窗口的位置以及大小
		jf.setTitle("paintObject");//设置窗口的标题
		PaintTest pt=new PaintTest();//初始化PaintTest类,同时得到pt对象。
		jf.add(pt);//把pt对象加到窗口中,就可以在窗口中画图
		jf.setVisible(true);//设置窗口可见。
    }

	@Override
	public void paint(Graphics g) {
//		String pathName="D:\\Java_dm\\eclipse2021_workspace\\paintTest\\src\\4.jpg";///绝对路径
		String pathName="/4.jpg";//可以是相对路径也可是是绝对路径
		Image image = null;		
		try {
			image=ImageIO.read(PaintTest.class.getResource(pathName));
		} catch (IOException e) {
			e.printStackTrace();
		}
		g.drawImage(image, 0, 0,null);
	}
}

绝对路径
在这里插入图片描述
相对路径:
在这里插入图片描述

效果嘎嘎好,基本上实现了用最少的代码实现了功能。有助于理解单一的知识点。


总结

第一种和第二种方法只能使用绝对路径。
第三种方法可以使用绝对路径也可以使用相对路径
对代码做一些补充性讲解,说一说其中几个参数的意义。

在这里插入图片描述
图片中对一些特殊的位置都做了标注,方便理解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值