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,一经查实,立即删除!

相关文章

git lfs使用(huggingface下载大模型文件)

0、git lfs是Git的一个扩展工具,用于管理大型文件(如音视频文件、数据集等),避免将它们存储在Git仓库中,而是单独存储在Git LFS服务器上。 1. 安装 Linux安装步骤: curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo b…

Qt | .pro开发经验笔记

Qt | .pro开发经验笔记 【1】 Qt中 += 和 *= 的区别【2】构建识别平台【3】构建定位版本【4】构建引入第三方库【5】QCustomplot绘图性能的改善【6】Qt4/Qt5/Qt6版本控制【7】pro文件中写上版本号、程序图标、产品名称、版权所有、文件说明等信息(Qt5才支持)【8】管理员运行程…

matlab 直方图及分布拟合

datanormrnd(0,5,[1,500]); %频数图 histogram(data,30); %频率图 histogram(data,30,Normalization,probability);%分布拟合方法一 histfit(data,30); %直方图&正态分布拟合 xlim([-16,16]); %x范围 %单独画拟合曲线(based on:频数直方图&#xff0…

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

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

SpringBoot和SpringCloud,SpringCloudAlibaba版本依赖关系

SpringBoot和SpringCloud,SpringCloudAlibaba版本依赖关系 版本说明 原始文档 毕业版本依赖关系(推荐使用) 由于 Spring Boot 3.0,Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大,目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot…

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

操作系统整体架构 搬出考研时的思维导图 操作系统主要分为 批处理系统(老古董,基本不用了)实时操作系统(嵌入式中使用较多,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:…

前端qiankun如何实现微应用路由跳转

appContext&#xff1a;qiankun 沙箱的上下文对象&#xff0c;包含了子应用的信息和一些常用的方法和属性config&#xff1a;子应用的配置对象globalProperties&#xff1a;子应用的全局属性对象&#xff0c;它可以被子应用中的所有组件和模块访问$mainRouter&#xff1a;这是父…

[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 测试环境 检测…

2024.3.11力扣每日一题——将标题首字母大写

2024.3.11 题目来源我的题解方法一 模拟方法二 官方优化版本 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2129 我的题解 方法一 模拟 直接模拟变化就可以了 时间复杂度&#xff1a;O(n)。n表示字符的数量 空间复杂度&#xff1a;O(m)。m表示单词的数量 public Strin…

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…

电商数据分析26——电商平台流量来源分析与优化策略

目录 写在开头1. 电商平台流量概览1.1 流量来源的分类1.2 各流量来源的特性与价值 2. 流量来源的数据分析方法2.1 流量数据收集与整理2.2 流量质量评估指标2.3 流量转化路径分析 3. 流量来源优化策略3.1 提升自然搜索流量的SEO策略关键词优化内容优化技术优化示例&#xff1a;在…

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…