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

01. Java绘图

01. Java绘图坐标体系

1. 坐标体系介绍

​ 下图说明了java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标系,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标表示当前位置为垂直方向,距离坐标原点y个像素
坐标轴

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中,去除演示代码的注释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/313591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑弹窗‘找不到msvcp120dll,无法继续执行代码’要怎么解决?快速修复msvcp120dll

当你的电脑弹窗‘找不到msvcp120dll,无法继续执行代码’,你是否一脸懵逼不知道要怎么去解决呢?其实这种dll丢失的问题还是比较常见的,所以我们遇到也不会担心,只要了解了,那么我们就可以轻松的修复msvcp120dl文件。下面…

C#实现Excel合并单元格数据导入数据集

目录 功能需求 Excel与DataSet的映射关系 范例运行环境 Excel DCOM 配置 设计实现 组件库引入 ​方法设计 返回值 参数设计 打开数据源并计算Sheets 拆分合并的单元格 创建DataTable 将单元格数据写入DataTable 总结 功能需求 将Excel里的worksheet表格导入到Da…

为什么企业容易陷入“自嗨式营销”,媒介盒子分析

互联网时代,各类信息都传播的非常快,同时信息技术的成熟也让许多企业可以监测广告效果,比如曝光、互动、转化等都可以通过数据体现,然而很多企业在营销过程中却发现,大部分的钱、精力、人力等都被浪费了。出现这种情况…

three.js 使用 tweenjs绘制相机运动动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

数据结构与算法:堆

数据结构与算法&#xff1a;堆 堆堆的定义堆的实现结构分析初始化向上调整算法向下调整算法堆的插入堆的删除得到堆顶元素判断堆是否为空 堆的应用TopK问题 堆 堆的定义 定义&#xff1a; 堆是一种数据结构&#xff0c;本质上是一个特殊的树结构&#xff0c;它是一个完全二叉…

k8s中的基础概念

k8s可以从硬件和软件两方面来理解&#xff1a; 硬件&#xff1a; 1、节点&#xff08;Node&#xff09;&#xff1a;类似于手机、平板、电脑 2、集群&#xff08;Cluster&#xff09;&#xff1a;多个节点组合到一起 3、持久卷&#xff08;Persistent Volumes&#xff09;&…

几款优秀科学开源计算软件介绍

有一些比较优秀的软件&#xff0c;它们在科学计算、数据处理和分析方面具有广泛的应用和功能。以下是一些比较知名的软件&#xff1a; SciPy&#xff1a;SciPy是一个非常流行的科学计算库&#xff0c;提供了大量的数学函数和算法&#xff0c;用于解决各种科学问题。它支持多种操…

【实用技巧】Steam Wallpaper Engine 壁纸引擎向手机导入壁纸方法

一、内容简介 本文介绍如何使用电脑上的 Wallpaper Engine &#xff08;Steam 平台中的壁纸引擎&#xff09;向安卓手机导入并使用壁纸。 二、所需原材料 安卓手机&#xff08;以笔者使用的华为荣耀50为例&#xff09;、安装有Steam以及Wallpaper Engine的电脑 三、导入方法…

清水模板厂家专供 — 易脱模,不翘曲

在现代建筑施工中&#xff0c;清水模板的选择对于实现优质建筑表面尤为关键。我们专供的清水模板&#xff0c;凭借其易脱模和不翘曲的特性&#xff0c;为建筑项目提供了理想的解决方案。 产品特点 易脱模性能&#xff1a;我们的清水模板表面光滑细腻&#xff0c;经过特殊处理…

C++系列-第1章顺序结构-7-浮点型

在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客&#xff0c;主要讲述浮点型的用法 浮点型 1、常量 圆周率是一个常数。计算机程序设计中有一个类似的概念是“常量”。C语言规定&#xff0c;一个常量可以直接调用(如 124、…

linux后台进程的总结

文章目录 方案1 nohup &方案2 screen 方案1 nohup & 1、单独使用 nohup 执行脚本&#xff0c;如下图所示&#xff0c;终端会被接管&#xff0c;就是标准输入stdin 被关闭了&#xff0c;使用ctrlc会导致终止执行&#xff0c;但是可以关闭这个终端&#xff0c;重新打开终…

GVM垃圾收集算法

分代收集理论 目前主流JVM虚拟机中的垃圾收集器&#xff0c;都遵循分代收集理论&#xff1a; 弱分代&#xff1a;绝大多数对象都是朝生夕灭强分带&#xff1a;经历越多次垃圾收集过程的对象&#xff0c;越难以回收&#xff0c;难以消亡 按照分代收集理论设计的“分代垃圾收集…

挑选全身动作捕捉设备需要看哪几点?

随着数字化发展&#xff0c;虚拟数字人成为企业、品牌营销中不可或缺的一环&#xff0c;虚拟数字人可以通过全身动作捕捉设备&#xff0c;能够打破次元壁与用户实时互动。那要怎么挑选全身动作捕捉设备呢&#xff1f; 广州虚拟动力推出了旗舰版惯性动捕设备DreamsCap X1&#…

洗地机是智商税吗?2024洗地机品牌推荐

为了更加便捷地应对家务&#xff0c;人们一直在不断发明各种工具。从最早的扫把和拖布&#xff0c;到后来的吸尘器和扫地机器人&#xff0c;我们的家务清洁方式不断演进。然而&#xff0c;在最近几年&#xff0c;洗地机的出现彻底改变了我们的家庭清洁体验&#xff0c;为我们带…

微服务自动化docker-compose

一、docker-compose介绍 Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如&#xff0c;一个使用Docker容器的微服务项目&#xff0c;通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢&#xff0c;一个个手动启动&#xff1f;假如有上百个微服…

安卓(雷电)模拟器清除屏幕密码[亲测可用]

1、设置磁盘可写 启动模拟器&#xff0c;然后在模拟器的设置界面&#xff0c;设置磁盘共享为可写入&#xff0c;重启模拟器&#xff0c;如下图&#xff1a; 2、找到模拟器目录 返回桌面&#xff0c;右键模拟器图标&#xff0c;打开文件所在目录&#xff0c;如下图&#xff1a…

一天一个设计模式---适配器模式

概念 适配器模式是一种结构型设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口之间进行协同工作&#xff0c;使得原本由于接口不匹配而无法合作的类能够一起工作。 具体内容 适配器模式主要包括以下几个要素&#xff1a; 目标接…

Maven_下载_安装_配置

文章参考&#xff1a;https://zhuanlan.zhihu.com/p/615382243 Maven简介 Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作。 maven优点&#xff1a;…

呼吸道病毒感染后,为何会引发细菌性肺炎?气道和肠道微生物组改变是关键

谷禾健康 病毒-细菌合并或继发感染 引起呼吸道感染的病毒是导致全世界高发病率和死亡率的原因&#xff0c;数十年来通常发生在冬季。在冬天&#xff0c;空气干燥&#xff0c;那些可能含有病毒的飞沫可以在空气中停留更长时间&#xff0c;并可以进一步传播。此外人的免疫力在冬季…