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.mzph.cn/news/802052.shtml

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

相关文章

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用,需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系:BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…

操作系统理论知识快速总览

操作系统整体架构 搬出考研时的思维导图 操作系统主要分为 批处理系统(老古董,基本不用了)实时操作系统(嵌入式中使用较多,RTOS)分时操作系统(PC中使用较多,Linux,Windows) 分时操作系统和实时操作系统的使用场景不同&#xf…

【蓝桥杯第十二届省赛B】(部分详解)

空间 8位1b 1kb1024b(2^10) 1mb1024kb(2^20) 时间显示 #include <iostream> using LLlong long; using namespace std; int main() {LL t;cin>>t;int HH,MM,SS;t/1000;SSt%60;//like370000ms370s,最后360转成分余下10st/60;MMt%60;t/60;HHt%24;printf("%02d:…

[C语言]——动态内存管理

目录 一.为什么要有动态内存分配 二.malloc和free 1.malloc 2.free 三.calloc和realloc 1.calloc 2.realloc 3.空间的释放​编辑 四.常见的动态内存的错误 1.对NULL指针的解引用操作 2.对动态开辟空间的越界访问 3.对非动态开辟内存使用free释放 4.使用free释放⼀块…

外汇110:谷歌起诉应用程序开发商伪造加密投资APP诈骗!

谷歌&#xff08;Google&#xff09;已对两家应用程序开发商提起诉讼&#xff0c;指控其参与“国际在线消费者投资欺诈计划”。该计划欺骗用户从 Google Play 商店和其他渠道下载虚假的安卓&#xff08;Android&#xff09;应用程序&#xff0c;并以承诺更高回报为幌子窃取他们…

SinoDB用户权限

SinoDB用户权限是由数据库对象和操作类型两个要素组成的&#xff0c;定义一个用户的权限就是定义这个用户可以对哪些数据对象进行哪些类型的操作。 SinoDB使用了三级权限来保证数据的安全性&#xff0c;它们分别是数据库级权限&#xff0c;表级权限和字段级权限。 1. 数据库级…

备考ICA----Istio实验17---TCP流量授权

备考ICA----Istio实验17—TCP流量授权 1. 环境准备 1.1 环境部署 kubectl apply -f <(istioctl kube-inject -f istio/samples/tcp-echo/tcp-echo.yaml) -n kim kubectl apply -f <(istioctl kube-inject -f istio/samples/sleep/sleep.yaml) -n kim1.2 测试环境 检测…

LangChain-14 Moderation OpenAI提供的功能:检测内容中是否有违反条例的内容

背景描述 我们在调用OpenAI的接口时&#xff0c;有些内容可能是违反条例的&#xff0c;所以官方提供了一个工具来检测。 安装依赖 pip install --upgrade --quiet langchain-core langchain langchain-openai编写代码 下文中我们使用了: OpenAIModerationChain 这个工具来…

PHP运算符与流程控制

华子目录 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自操作运算符 计算机码位运算符 运算符优先级流程控制控制分类顺序结构分支结构if分支switch分支 循环结构for循环while循环continuebreak 运算符 运算符&#xff1a;operator&#xf…

JNA、JNI、原生C++函数调用效率及测试过程

结论 如果JAVA要高效调用C函数&#xff0c;则需要通过JNI封装C函数后进行native方法调用&#xff0c;JNI的执行效率比JNA高600倍左右。从开发效率上来说&#xff0c;JNA开发速度比JNI快许多&#xff0c;因为不需要做二次封装 测试对比 纯C调用&#xff1a; Function call to…

深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。 主要分析命令&#xff1a; vmmap, leaks, malloc_history 一&#xff1a;前言 有 3 种思考方式 你想看到对象的创建吗&#xff1f;你想要查看内存中引用对象或地址的内容吗&#xff1f;或者你只是想看看 一个实例有多大&#…

【强化学习】Actor-Critic

Actor-Critic算法 欢迎访问Blog全部目录&#xff01; 文章目录 Actor-Critic算法1.Actor-Critic原理1.1.简述1.1.优劣势1.3.策略网络和价值网络1.3.1.策略网络&#xff08;Actor)1.3.2.价值网络&#xff08;Critic) 1.4.程序框图和伪代码 2.算法案例&#xff1a;Pendulum-v12…

T-Mamba:用于牙齿 3D CBCT 分割的频率增强门控长程依赖性

T-Mamba&#xff1a;用于牙齿 3D CBCT 分割的频率增强门控长程依赖性 摘要Introduction方法T-Mamba architectureTim block T-Mamba: Frequency-Enhanced Gated Long-Range Dependendcy for Tooth 3D CBCT Segmentation 摘要 三维成像中的高效牙齿分割对于正畸诊断至关重要&am…

Windows系统读取XDMA实际运行链路速度和PCIE带宽

在我们平常设计XDMA的时候&#xff0c;经常会遇到一个问题&#xff1a; 在Vivado中设计的XDMA IP中选择的PCIE带宽和链路速度是理想的&#xff0c;但是下到板卡运行的时候&#xff0c;测量速度却发现读写速度根本不是理想中的速度&#xff0c;找不到问题&#xff0c;无法证明我…

Octopus:2B 参数语言模型即可媲美 GPT-4 的函数调用性能

近年来&#xff0c;大语言模型在 PC、智能手机和可穿戴设备的操作系统中应用逐渐成为趋势。 例如&#xff0c;MultiOn (Garg, 2024) 和 Adept AI (Luan, 2024) 等 AI 助理工具&#xff0c;以及 Rabbit R1 (Lyu, 2024) 和 Humane AI Pin (Chaudhri, 2024) 等 AI 消费产品在消费者…

蓝桥杯 交通信号 2022研究生组

问题&#xff1a; Dijstra算法变形题&#xff0c;有向边分正行和逆行方向&#xff0c;注意逆行的绿灯时间是正行的红灯时间。 这题的关键是理清从当前节点出发&#xff0c;到下一个节点是哪一时刻&#xff0c;理清这一点后&#xff0c;再跑Dijstra算法求最短路。 假设curr_t时…

JavaScript(三)-Web APIS

文章目录 DOM事件进阶事件流事件流与两个阶段说明事件捕获事件冒泡阻止冒泡解绑事件 事件委托其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 DOM事件进阶 事件流 什么是事件流 事件流指的是事件完整执行过程中的流动路径 事件流与两个阶段说明 捕获与冒泡 …

简介:基于Web的产品3D

基于 Web 的产品 3D 通过可视化界面获得各种选项来个性化他们的产品&#xff0c;例如颜色、材料、尺寸、文字、徽标、零件等。 在过去几年中&#xff0c;随着 3D 建模和渲染软件的出现&#xff0c;3D 渲染现在更常用于营销和促销目的。设计师、制造商和营销人员使用 3D 产品渲…

政安晨:【Keras机器学习实践要点】(二十一)—— MobileViT:基于变换器的移动友好图像分类模型

目录 简介 导入 超参数 MobileViT 实用程序 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; …

AI 创业指难(一) :Stable Diffusion AI 绘画怎么用

一. 前言 一年不到&#xff0c;AI对生活和工作的影响已经逐步体现。所以千万别掉队了&#xff0c;也许 AI 不能成为我们的主要工作&#xff0c;但是如何借助 AI 实现副业的扩展同样值得思考。 这一篇就来讲一个 AI 绘画工具&#xff0c;这个工具我也是才上手不久&#xff0c;…