01.坦克大战项目- Java绘图
01. Java绘图坐标体系
1. 坐标体系介绍
下图说明了java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标系,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标表示当前位置为垂直方向,距离坐标原点y个像素
2. 坐标体系=像素
- 绘图还必须要搞清楚一个重要的概念-像素
- 上计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800x 600,表示计算机屏幕上的每一行由800个 点组成,共有600行,整个计算机屏幕共有480 000个像素。像素是一个密度单位而厘米是长度单位,两者无法比较
02. java绘图技术
1. 介绍-快速入门
我们先看一个案例,在面板上画一个小圆,然后借这个案例,来讲解java绘图技术原理
import javax.swing.*;
import java.awt.*;/*** 01. 演示如何在画板上画出圆形**/
public class DrawCircle extends JFrame{//JFrame对应窗口, 可以理解成一个画框//2. 定义一个面板private MyPanel myPanel = null;public static void main(String[] args) {new DrawCircle();}public DrawCircle() { //构造器//2.1 初始化面板myPanel = new MyPanel();//2.2 把面板放入到窗口this.add(myPanel);//2.3 设置窗口大小this.setSize(400, 300);//2.4 当点击窗口的x 程序停止运行this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);//可以显示}
}
//1. 先定义一个MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {//说明//1. MyPanel 对象就是一个画板//2. Graphics g 把 g 理解成一只画笔//2. Graphics 提供了很多绘图的方法啊啊@Overridepublic void paint(Graphics g) {super.paint(g);//调用父类的方法完成初始化System.out.println("paint 方法被调用了");g.drawOval(10, 10, 100, 100);}
}
2. 绘图原理
Component类提供了两个绘图相关最重要的方法
- paint(Graphics g)绘制组件的外观
- repaint() 刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动调用paint()方法来绘制组件
当以下情况paint()将会被调用
- 窗口最想话,再最大化
- 窗口的大小发生变化
- repaint函数被调用
3. Graphics类
1. 基本介绍
Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法:[参考jdk帮助文档]
- 画直线 drawLine(int x1, int y1, int x2, int y2)
- 画矩形边框 drawRect(int x, int y, int width, int height)
- 画椭圆边框 drawOval(int x, int y, int width, int height)
- 填充矩形 fillRect(int x, int y, int width, int height)
- 填充椭圆 fillOval(int x, int y, int width, int height)
- 画图片 drawImage(img, int x, int y, …)
- 画字符串 drawString(String str, int x, int y)
- 设置画笔的字体 setFont(Font font)
- 设置画笔的颜色 SetColor(Color c)
2. 案例
import javax.swing.*;
import java.awt.*;public class DrawCircle extends JFrame{//JFrame对应窗口, 可以理解成一个画框//2. 定义一个面板private MyPanel myPanel = null;public static void main(String[] args) {new DrawCircle();}public DrawCircle() { //构造器//2.1 初始化面板myPanel = new MyPanel();//2.2 把面板放入到窗口this.add(myPanel);//2.3 设置窗口大小this.setSize(400, 300);//2.4 当点击窗口的x 程序停止运行this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);//可以显示}
}
//1. 先定义一个MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {//说明//1. MyPanel 对象就是一个画板//2. Graphics g 把 g 理解成一只画笔//2. Graphics 提供了很多绘图的方法啊啊@Overridepublic void paint(Graphics g) {super.paint(g);//调用父类的方法完成初始化System.out.println("paint 方法被调用了");g.drawOval(10, 10, 100, 100);//演示绘制不同的图形..
// 1. 画直线 drawLine(int x1, int y1, int x2, int y2)
// g.drawLine(10, 10, 100, 100);// 2. 画矩形边框 drawRect(int x, int y, int width, int height)
// g.drawRect(10,10, 100, 100);// 3. 画椭圆边框 drawOval(int x, int y, int width, int height)// 4. 填充矩形 fillRect(int x, int y, int width, int height)
// //设置画面颜色
// g.setColor(Color.blue);
// g.fillRect(10, 10, 100,100);// 5. 填充椭圆 fillOval(int x, int y, int width, int height)
// g.setColor(Color.red);
// g.fillOval(10, 10, 100, 100);// 6. 画图片 drawImage(img, int x, int y, ..)
// //6.1 获取图片资源 /bg.png 表示在该项目的根目录获取 bg.png 图片资源
// //6.2 添加图片时我们要将图片资源放入 out/你的项目名称例如 chapter16
// Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
// g.drawImage(image, 10, 10, 175, 221, this);// 7. 画字符串 drawString(String str, int x, int y)
// 8. 设置画笔的字体 setFont(Font font)
// 9. 设置画笔的颜色 SetColor(Color c)//7.1 给画笔设置颜色
// g.setColor(Color.red);
// g.setFont(new Font("宋体",Font.BOLD, 20));
// //7.2 这里设置的 100, 100, 对应的点是你字符串的左下角
// g.drawString("天津", 100, 100);}
}
如果需要实验代码,可以在自己的idea中,去除演示代码的注释