Java绘图坐标体系

一、介绍

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

二、像素

概念:计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。需要注意的是,像素是一个密度单位,而厘米是长度单位,两者无法比较

三、绘图原理

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

1.paint(Graphics g)绘制组件的外观

2.repaint)刷新组件的外观。

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

在以下情况paint0将会被调用:

(1)窗口最小化,再最大化

(2)窗口的大小发生变化

(3)repaint方法被调用

四、入门案例

在面板上画一个圆圈

步骤如下:

1.先定义一个MyPanel类, 继承JPanel类, 画图形,就在面板上画

2.在MyPanel中重写paint()方法,在paint方法中调用Graphics类中的方法来画图

3.定义一个面板,让主类继承JFrame,

4.定义一个构造器,在里面设置窗口的大小等

5.调用该构造器,完成绘图

public class DrawCircle extends JFrame { //JFrame对应窗口,可以理解成是一个画框//定义一个面板private MyPanel mp = null;public static void main(String[] args) {new DrawCircle();}public DrawCircle() {//构造器//初始化面板mp = new MyPanel();//把面板放入到窗口(画框)this.add(mp);//设置窗口的大小this.setSize(400, 300);//当点击窗口的小×,程序完全退出.this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);//可以显示}
}//1.先定义一个MyPanel, 继承JPanel类, 画图形,就在面板上画
class MyPanel extends JPanel {//说明://1. MyPanel 对象就是一个画板//2. Graphics g 把 g 理解成一支画笔//3. Graphics 提供了很多绘图的方法@Overridepublic void paint(Graphics g) {//绘图方法super.paint(g);//调用父类的方法完成初始化.//画出一个圆形.g.drawOval(10, 10, 100, 100);}
}

五、Graphics类

Graphics常用方法(以下代码演示只需将上面入门案例中g.drawOval(10, 10, 100, 100)改成下述代码即可)

(1)画直线

drawLine(int x1,int y1,int x2,int y2),x1,y1表示直线起点的坐标,x2,y2表示直线尾部的坐标

g.drawLine(10, 10, 100, 100);

效果: 

(2)画矩形边框

drawRect(int x, int y, int width, int height) ,x,y表示矩形边框左上角的坐标,width,height分别表示矩形边框的宽高

g.drawRect(10, 10, 100, 100);

效果:

(3)画椭圆边框

drawOval(int x, int y, int width, int height),x,y表示包围椭圆的边框左上角的坐标,width,height分别表示边框的宽高

g.drawOval(10, 10, 100, 100);

效果:

(4)填充矩形、设置画笔的颜色

fillOval(int x, int y, int width, int height),x,y表示矩形左上角的坐标,width,height分别表示该矩形的宽高

g.setColor(Color.blue),Color.blue就是设置的画笔颜色,默认黑色

g.setColor(Color.blue);//设置画笔颜色为蓝色
g.fillRect(10, 10, 100, 100);

效果:

(5)填充椭圆

fillOval(int x, int y, int width, int height),x,y表示包围椭圆的边框左上角的坐标,width,height分别表示边框的宽高

g.setColor(Color.red);//设置画笔颜色为红色
g.fillOval(10, 10, 100, 100);

效果:

(6)放图片

drawImage(Image img, int x, int y, int width, int height, this),img为图片资源对象,x,y表示图片左上角的坐标,width,height分别表示图片的宽高,this表示在当前的画板

获取图像资源时,maven的项目的根目录是resources,我是在resources目录下新建了一个image的目录,在把图片放到image目录下,这里用的是绝对路径

//1. 获取图片资源, /image/a.png为图片地址
Image image =Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/image/a.png"));
g.drawImage(image, 10, 10, 175, 221, this);

效果:

(7)写文字和设置字体

dramString(String str, int x, int y),str就是要写上去的字符串,x,y是字符串的左下角坐标

setFont(new Font("隶书", Font.BOLD, 50)),Font.BOLD表示设置为粗体,50表示字体的大小

g.setColor(Color.red);
g.setFont(new Font("隶书", Font.BOLD, 50));
g.drawString("北京你好", 100, 100);

效果:

六、综合案例

画一个小坦克

代码:

MyPanel类

import javax.swing.*;
import java.awt.*;public class MyPanel extends JPanel {@Overridepublic void paint(Graphics g) {super.paint(g);g.setColor(Color.cyan);g.fillRect(47, 50, 10,50);g.fillRect(77, 50, 10,50);g.fillRect(57, 60, 20,30);g.setColor(Color.blue);g.fillOval(57, 65, 20, 20);g.drawLine(67, 75, 67, 50);}
}

draw类

import javax.swing.*;public class draw extends JFrame {private MyPanel myPanel = null;public draw() {myPanel = new MyPanel();this.add(myPanel);this.setSize(500, 600);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
}

主类Execute类

public class Execute {public static void main(String[] args) {new draw();}
}

运行效果:

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

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

相关文章

西门子PLC(S7-200 SMART)学习笔记1:初识PLC可编程逻辑器件

今日开始我的西门子PLC学习之路,学习的型号以S7-200 SMART为主 主要认识一下PLC是什么、型号怎么看、 通信相关、编程软件、构造及工作原理 目录 西门子官方PLC手册获取: 1、PLC可编程逻辑器件的基本认识: PLC的结构及各部分的作用&#xff…

threejs 基础知识点汇总

threejs 基础知识点汇总 之前写了几篇博文,但是我觉得写的不好,我今天再补充一篇还不好的,把基础知识点汇总一下,不写运行的代码了,只写关键代码,但是看了之前我写的那几篇,看这篇的话问题其实不…

群晖NAS使用Docker部署Potopea在线图片编辑工具并实现公网访问

文章目录 1. 部署Photopea2. 运行Photopea3. 群晖安装Cpolar4. 配置公网地址5. 公网访问测试6. 固定公网地址 本文主要介绍如何在群晖NAS使用Docker部署Potopea在线图片编辑工具,并结合cpolar内网穿透实现公网环境可以远程访问本地部署的Potopea. Photopea是一款强大…

伺服电机的惯性

一、伺服电机的惯性 伺服电机的惯性主要指电机及其连接的负载的惯性。它是通过将物体的质量与其距离旋转轴的平方相乘得到的。对于伺服电机来说,惯性体现了电机和负载对速度和加速度变化的阻力程度,即其惯性越大,对速度和加速度变化的阻…

人工智能_大模型023_AssistantsAPI_01_OpenAI助手的创建_API的调用_生命周期管理_对话服务创建---人工智能工作笔记0159

先来说一下一些问题: 尽量不要微调,很麻烦,而且效果需要自己不断的去测试. 如果文档中有图表,大量的图片去分析就不合适了. 是否用RAG搜索,这个可以这样来弄,首先去es库去搜能直接找到答案可以就不用去RAG检索了,也可以设置一个分,如果低于60分,那么就可以去进行RAG检索 微…

看不起的行业,其实比工作 赚的多

1、烧烤,只要你敢干,一年的利润是普通人五年的工资,日入2000。 2、翻新二手手机,深圳华强北好的时间段一天能卖出几千台,日入1000。 3、大学食堂开个小卖部,一个月就能挣个大千,日入1500。 4…

基于Spring Boot与Vue的智能化学生心理咨询评估系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

计算机网络:网络层的路由选择协议

网络层的 路由选择协议 路由表 从下图的三个简单的拓扑结构所示,如果其中一条链路断了,静态路由就通不了,断了。但是使用动态路由可以动态调届选择策略。 静态路由和动态路由的区别对比和特点 路由选择协议 自治系统AS 内部网关协议RI…

MySQL高级(索引结构Hash,为什么InnoDB存储引擎选择使用B+tree索引结构?)

目录 1、Hash索引结构 2、Hash索引特点 3、存储引擎支持 4、为什么InnoDB存储引擎选择使用Btree索引结构? 1、Hash索引结构 哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。 如…

SpringBoot第一个hello world项目

文章目录 前言一、Spring Boot是什么?二、使用步骤1. 创建项目2.书写测试 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了…

【机器学习】深入解析机器学习基础

在本篇深入探讨中,我们将揭开机器学习背后的基础原理,这不仅包括其数学框架,更涵盖了从实际应用到理论探索的全方位视角。机器学习作为数据科学的重要分支,其力量来源于算法的能力,这些算法能够从数据中学习并做出预测…

【JavaWeb】Tomcat服务器

目录 动态网站动态网站的特点 程序架构B/S与C/S的比较B/S技术的工作原理URL 什么是Web服务器 Web服务器、服务端、服务器的区别和联系什么是TomcatTomcat服务器的安装与配置解压缩版本Tomcat的配置添加系统变量,名称为CATALINA_HOME,值为Tomcat的安装目录…

C/C++中局部变量static用法实例

1. 普通局部变量存储于进程栈空间,使用完毕会立即释放,静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0,并且静态局部变量存储于进程的全局数据区,即使函数返回&#xff0…

解密项目管理专业术语:十大名词背后的实战技巧

项目管理是一门综合学科,涵盖了一系列方法、技能和工具。今天为大家带来项目管理的十大专业术语,它们分别是项目范围、利益相关者管理、工作分解结构(WBS)、里程碑、风险管理、资源分配、关键路径法(CPM)、…

Word·VBA文档合并

目录 1,复制法,不保留原文档格式2,复制法,保留原文档格式3,插入法,保留原文档格式 之前的文章《WordVBA实现邮件合并》虽然可以生成邮件合并文档结果,但是不能像《python实现word邮件合并》一样…

计算机网络-运输层

运输层 湖科大计算机网络 参考笔记,如有侵权联系删除 概述 运输层的任务:如何为运行在不同主机上的应用进程提供直接的通信服务 运输层协议又称端到端协议 运输层使应用进程看见的好像是在两个运输层实体之间有一条端到端的逻辑通信信道 运输层为应…

鸿蒙原生应用已超4000个!

鸿蒙原生应用已超4000个! 来自 HarmonyOS 微博近期消息,#鸿蒙千帆起# 重大里程碑!目前已有超4000个应用加入鸿蒙生态。从今年1月18日华为宣布首批200多家应用厂商正在加速开发鸿蒙原生应用,到3月底超4000个应用,短短…

【算法详解】二分查找

1. 二分查找算法介绍 「二分查找算法(Binary Search Algorithm)」:也叫做 「折半查找算法」、「对数查找算法」。是一种在有序数组中查找某一特定元素的搜索算法。 基本算法思想:先确定待查找元素所在的区间范围,在逐步…

k8s_入门_命令详解

命令详解 kubectl是官方的CLI命令行工具,用于与 apiserver进行通信,将用户在命令行输入的命令,组织并转化为 apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径 1. 帮助 2. 查看版本信息 3. 查看资源对象等 查看No…

C语言——文件管理

文件:即磁盘上的文件,使用文件可以将数据直接存放在电脑的硬盘上,做到数据持久化。 在程序设计中,按文件的功能划分,将文件分为程序文件与数据文件 程序文件 程序文件包括源文件(.c)&#xff0…