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 提供了很多绘图的方法啊啊@Overridepublic 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 提供了很多绘图的方法啊啊@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中,去除演示代码的注释

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭露欧拉骗局4.“Σ1/n²=π²/6”里的猫腻

自然数平方倒数求和Σ1/n是一个并不复杂的问题,但它困扰了欧洲大陆整整90年,在欧系数学里它被称为“巴塞尔级数”。 解决巴塞尔级数让欧拉一战成名,然而欧拉采用的方法对数学这门学问是严重的侮辱。数学是工具学科,数学的宗旨是化…

Asp .Net Core 系列: 集成 Consul 实现 服务注册与健康检查

文章目录 什么是 Consul?安装和运行 ConsulAsp .Net Core 如何集成 Consul 实现服务注册和健康检查Consul.AspNetCore 中的 AddConsul 和 AddConsulServiceRegistration 方法 究竟做了什么?AddConsul 方法AddConsulServiceRegistration 方法 配置 Consul 检查服务封…

【椒盐玉兔】GPTs Store 商店的TOP100 自定义GPT使用报告

详细的图文报告有100张图,因为太长就放网盘链接 链接:百度网盘 请输入提取码 提取码:ub2n 解压密码:heehel 更多作品:长期更新国内外,中英文AI人工智能作品 整理获取 通过算法,筛选出了目前访…

每天刷两道题——第十四天

1.1矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。 输入:matrix [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]] 原地算法(…

Java面试题(java高级面试题)

线程池的核心线程数设置为多大比较合理? Worker线程在执行的过程中,有一部计算时间需要占用CPU,另一部分等待时间不需要占用CPU,通过量化分析,例如打日志进行统计,可以统计出整个Worker线程执行过程中这两…

书生·浦语大模型--第二节课笔记

书生浦语大模型--第二节课 大模型及InternLM基本介绍实战部分demo部署准备工作模型下载代码准备终端运行web demo 运行 Lagent 智能体工具调用 Demo准备工作Demo 运行 浦语灵笔图文理解创作 Demo环境准备下载模型下载代码运行 大模型及InternLM基本介绍 大模型 定义&#xff…

一阶低通滤波器

一阶低通滤波器 X为输入,Y为滤波后得到的输出值;本次的输出结果主要取决于上次的滤波输出值,其中a是和滤波效果有关的一个参数,称为滤波系数;它决定新采样值在本次滤波结果中所占的权重; 滤波系数a越小&a…

2024年湖北中级职称是不是通用?不限制地域呢?

最近有人问甘建二湖北中级职称是否全国通用? 甘建二可以明确告诉大家,职称证书可以全国通用了,只要是人SHE局部门评审的正规职称证都是可以的。使用地域也没有限制。 因为职称没有说哪个省份只能在哪里使用,不像是二建&#xff0…

500mA High Voltage Linear Charger with OVP/OCP

一、General Description YHM2810 is a highly integrated, single-cell Li-ion battery charger with system power path management for space-limited portable applications. The full charger function features Trickle-charge, constant current fast charge and const…

Java中的栈和队列操作,相互实现(力扣 232, 225)

栈和队列(Java) Java中的 栈 & 队列 操作栈的使用队列的使用 LeetCode 232. 用栈实现队列我的代码 LeetCode 225. 用队列实现栈我的代码 Java中的 栈 & 队列 操作 栈的使用 栈的方法功能Stack()构造一个空的栈E push(E e)将e入栈,并…

群狼调研开展某预制菜品牌NPS及消费者心理研究调研

为了解某预制菜品牌在消费者心中的地位,评估其NPS(净值),并深入研究消费者的购买心理和需求,为品牌提供有针对性的改进建议。群狼调研(长沙消费者画像研究)受客户委托开展某预制菜品牌NPS及消费…

【开源】基于JAVA语言的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

Vulnhub-GoldenEye

一、信息收集 nmap探测:nmap -p 1-65535 -T4 -A -v 192.168.1.9 PORT STATE SERVICE VERSION 25/tcp open smtp Postfix smtpd |_smtp-commands: ubuntu, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN |_…

Python基础知识:整理12 JSON数据格式的转换

首先导入python中的内置包json import json 1 准备一个列表,列表内每个元素都是字典,将其转换为JSON 使用json.dumps()方法 data [{"name": "John", "age": 30}, {"name": "Jane", "age":…

HarmonyOS Stage模型 UIAbility生命周期状态

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态 Create状态,在UIAbility实例创建时触发,对应onCreate回调。可以在onCreate回调中进行相关初始化操作 import UIAbility from ohos.app.ability.UIAbility; import window from…

NAND SCA接口对性能影响有多大?

在多LUN场景下,SCA接口尤其有助于提高随机读取性能。通过合理安排读取命令和等待时间(如tR),SCA接口可以在一个LUN完成读取后立即开始另一个LUN的读取操作,而无需等待整个DQ总线空闲,从而减少了延迟和提高了…

c++ 继承是否需要调用父类的构造函数

今天遇到一个继承的问题。请回答下面问题:(已知 B 继承自 A) 子类是否需要调用父类的构造函数?必须还是可选? 先回答: 结论1 :强烈建议显示调用父类构造。因为有些父类可能会初始化一些成员变…

基于SpringBoot的洗衣店管理系统

基于SpringBoot的洗衣店管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 可视化展示 用户界面 管理员界面 摘要 洗衣店管理系统基于Spring Boot框…

c++对象拷贝与堆中的对象实例拷贝

文章目录 拷贝构造函数等于号运算符总结深拷贝堆中对象实例的拷贝错误的方法正确的拷贝方法使用多态技术拷贝实例拷贝构造函数 拷贝构造函数是C++中的一种特殊的构造函数,用于创建一个新对象,该对象是已存在的对象的副本。 拷贝构造函数的语法如下: class ClassName {// .…

IBM X3750 M4服务器主板故障全国协助处理

2023年12月31这天中午看到有位网络朋友加我,通过后该用户反馈说是有一台IBM System x3750 M4服务器有故障,现在无法开机。希望我们工程师协助他检测 分析 定位该故障问题原因和处理方案。 如上图所示:经过工程师与用户排查,发现该…