深入简出的实现窗口中画上图片,把代码压缩到最简单,帮助理解。
前言
`提示:
继承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);
}
}
绝对路径
相对路径:
效果嘎嘎好,基本上实现了用最少的代码实现了功能。有助于理解单一的知识点。
总结
第一种和第二种方法只能使用绝对路径。
第三种方法可以使用绝对路径也可以使用相对路径
对代码做一些补充性讲解,说一说其中几个参数的意义。
图片中对一些特殊的位置都做了标注,方便理解。