01.坦克大战项目-Java绘图坐标体系

01.坦克大战项目- Java绘图

01. Java绘图坐标体系

1. 坐标体系介绍

​ 下图说明了java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标系,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标表示当前位置为垂直方向,距离坐标原点y个像素
01.坦克大战项目-Java绘图坐标体系_第1张图片

2. 坐标体系=像素

  1. 绘图还必须要搞清楚一个重要的概念-像素
  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 提供了很多绘图的方法啊啊
    @Override
    public void paint(Graphics g) {
        super.paint(g);//调用父类的方法完成初始化
        System.out.println("paint 方法被调用了");
        g.drawOval(10, 10, 100, 100);

    }
}

2. 绘图原理

Component类提供了两个绘图相关最重要的方法

  1. paint(Graphics g)绘制组件的外观
  2. repaint() 刷新组件的外观

当组件第一次在屏幕显示的时候,程序会自动调用paint()方法来绘制组件
当以下情况paint()将会被调用

  1. 窗口最想话,再最大化
  2. 窗口的大小发生变化
  3. repaint函数被调用

3. Graphics类

1. 基本介绍

Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法:[参考jdk帮助文档]

  1. 画直线 drawLine(int x1, int y1, int x2, int y2)
  2. 画矩形边框 drawRect(int x, int y, int width, int height)
  3. 画椭圆边框 drawOval(int x, int y, int width, int height)
  4. 填充矩形 fillRect(int x, int y, int width, int height)
  5. 填充椭圆 fillOval(int x, int y, int width, int height)
  6. 画图片 drawImage(img, int x, int y, …)
  7. 画字符串 drawString(String str, int x, int y)
  8. 设置画笔的字体 setFont(Font font)
  9. 设置画笔的颜色 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 提供了很多绘图的方法啊啊
    @Override
    public 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中,去除演示代码的注释

你可能感兴趣的:(java,开发语言)