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…

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入栈,并…

【开源】基于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总线空闲,从而减少了延迟和提高了…

基于SpringBoot的洗衣店管理系统

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

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

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

pytorch学习笔记(七 )

池化类似压缩 最大池化-上采样 例如给一个3的话就会生成一个33的窗口(生成相同的高和宽),给一个tuple就会给出一个相同的池化核。stride默认值就是核的大小 dilation 在卷积dialation设置之后每一个会和另外的差一个,空洞卷积 …

使用Pygame库来显示一个简单的窗口,并绘制一些基本的形状和文本

import pygame from pygame.locals import *# 初始化pygame库 pygame.init()# 创建窗口并设置大小和标题 screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("My Pygame")# 定义颜色…

给定n个字符串s[1...n], 求有多少个数对(i, j), 满足i < j 且 s[i] + s[j] == s[j] + s[i]?

题目 思路&#xff1a; 对于字符串a&#xff0c;b, (a.size() < b.size()), 考虑对字符串b满足什么条件&#xff1a; 由1、3可知a是b的前后缀&#xff0c;由2知b有一个周期是3&#xff0c;即a.size()&#xff0c;所以b是用多个a拼接而成的&#xff0c;有因为a是b的前后缀&…

“消费新纪元:从传统消费到消费增值的跨越!“

你是否已经厌倦了传统消费模式&#xff0c;感觉每一次购物只是让钱从左手流到右手&#xff1f;现在&#xff0c;一个新的消费模式正在兴起&#xff0c;它让你的消费变得更有价值&#xff01; 消费增值是一种创新的消费理念&#xff0c;它让你在享受优质商品和服务的同时&#x…