【java】27:java绘图

news2025/1/16 8:00:34
坐标体系 - 介绍:
下图说明了Java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点×个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。
坐标体系 - 像素:
1.绘图还必须要搞清一个非常重要的概念-像素一个像素等于多少厘米?
2.计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较
介绍 - 快速入门:
/**
* 演示如何在面板上画出圆形
*/
@SuppressWarnings({"all"})
public class DrawCircle extends JFrame { //JFrame 对应窗口,可以理解成是一个画框
第 744页
韩顺平循序渐进学 Java 零基础
//定义一个面板
private MyPanel mp = null;
public static void main(String[] args) {
new DrawCircle();
System.out.println("退出程序~");
}
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 提供了很多绘图的方法
//Graphics g
@Override
public void paint(Graphics g) {//绘图方法
super.paint(g);//调用父类的方法完成初始化. System.out.println("paint 方法被调用了~");
//画出一个圆形. //g.drawOval(10, 10, 100, 100);
//演示绘制不同的图形.. //画直线 drawLine(int x1,int y1,int x2,int y2)
//g.drawLine(10, 10, 100, 100);
//画矩形边框 drawRect(int x, int y, int width, int height)
//g.drawRect(10, 10, 100, 100);
//画椭圆边框 drawOval(int x, int y, int width, int height)
//填充矩形 fillRect(int x, int y, int width, int height)
//设置画笔的颜色
// g.setColor(Color.blue);
// g.fillRect(10, 10, 100, 100);
//填充椭圆 fillOval(int x, int y, int width, int height)
// g.setColor(Color.red);
// g.fillOval(10, 10, 100, 100);
//画图片 drawImage(Image img, int x, int y, ..)
//1. 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
// Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
// g.drawImage(image, 10, 10, 175, 221, this);
//画字符串 drawString(String str, int x, int y)//写字
//给画笔设置颜色和字体
g.setColor(Color.red);
g.setFont(new Font("隶书", Font.BOLD, 50));
//这里设置的 100, 100, 是 "北京你好"左下角
g.drawString("北京你好", 100, 100);
//设置画笔的字体 setFont(Font font)
//设置画笔的颜色 setColor(Color c)
}
}
绘图原理:
Component类提供了两个和绘图相关最重要的方法:
1.paint(Graphics g)绘制组件的外观
2.repaint())刷新组件的外观。
当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。
在以下情况paint()将会被调用:
1.窗口最小化,再最大化
2.窗口的大小发生变化
3.repaint方法被调用
思考题:如何证明上面的三种情况,会调用paint()方法
Graphics 类:
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.填充椭圆 filOval(int x,int y,int width,int height)
6.画图片 drawlmage(Image img, int x, int y.…)
7.画字符串drawString(String str,int x,int y)
8.设置画笔的字体setFont(Font font)
9.设置画笔的颜色setColor(Color c)
3 java 事件处理机制:
/**
* 演示小球通过键盘控制上下左右的移动-> 讲解 Java 的事件控制
*/
public class BallMove extends JFrame { //窗口
MyPanel mp = null;
public static void main(String[] args) {
BallMove ballMove = new BallMove();
}
//构造器
public BallMove() {
mp = new MyPanel();
this.add(mp);
this.setSize(400, 300);
//窗口 JFrame 对象可以监听键盘事件, 即可以监听到面板发生的键盘事件
this.addKeyListener(mp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//面板, 可以画出小球
//KeyListener 是监听器, 可以监听键盘事件
class MyPanel extends JPanel implements KeyListener {
//为了让小球可以移动, 把他的左上角的坐标(x,y)设置变量
int x = 10;
int y = 10;
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x, y, 20, 20); //默认黑色
}
//有字符输出时,该方法就会触发
第 759页
韩顺平循序渐进学 Java 零基础
@Override
public void keyTyped(KeyEvent e) {
}
//当某个键按下,该方法会触发
@Override
public void keyPressed(KeyEvent e) {
//System.out.println((char)e.getKeyCode() + "被按下..");
//根据用户按下的不同键,来处理小球的移动 (上下左右的键)
//在 java 中,会给每一个键,分配一个值(int)
if(e.getKeyCode() == KeyEvent.VK_DOWN) {//KeyEvent.VK_DOWN 就是向下的箭头对应的 code
y++;
} else if(e.getKeyCode() == KeyEvent.VK_UP) {
y--;
} else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
x--;
} else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
x++;
}
//让面板重绘
this.repaint();
}
//当某个键释放(松开),该方法会触发
@Override
public void keyReleased(KeyEvent e) {
}
}
2 基本说明:
java事件处理是采取“委派事件模型”。当事件发生时,产生事件的对象,会把此“信息”传递给“事件的监听者"处理,这里所说的“信息"实际上就是java.awt.event事件类库里某个类所创建的对象,把它称为“事件的对象”。
示意图:
事件处理机制深入理解:
1.前面我们提到几个重要的概念事件源,事件,事件监听器我们下面来全面的介绍它们。
2.事件源:事件源是一个产生事件的对象,比如按钮,窗口等。
3.事件:事件就是承载事件源状态改变时的对象,比如当键盘事件、鼠标事件、窗口事件等等,会生成一个事件对象,该对象保存着当前事件很多信息,比如KeyEvent 对象有含有被按下键的Code值。java.awt.event包和javax.swing.event包中定义了各种事件类型
4.事件类型:查阅jdk文档
5.事件监听器接口
(1)当事件源产生一个事件,可以传送给事件监听者处理
(2)事件监听者实际上就是一个类,该类实现了某个事件监听器接口比如前面我们案例中的MyPanle就是一个类,它实现了KeyListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理
(3)事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现多个监听接口
(4)这些接口在java.awt.event包和javax.swing.event包中定义。列出常用的事件监听器接口,查看jdk文档聚集了.

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

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

相关文章

APP自动化测试-Android SDK SDK Manager.exe或者uiautomatorviewer.bat打不开,点击就一闪而已的原因

原因是找不到Java.exe的路径, 如果是uiautomatorviewer.bat打不开,则使用文本编辑器打开它,然后添加java安装路径 set java_exeC:\Program Files\Java\jdk1.8.0_321\bin\java.exe 同理: 如果是SDK Manager.exe和AVD Manager.ex…

2024全新Java学习路线图一条龙(视频+课件+源码资料)

前言 互联网浩瀚无际,你能来到这里,是机遇也是缘分,机遇,就像我的标题一样,你找到了一份Java 360度无死角的 Java 学习路线,而缘分让我们相遇,注定给你的学习之路搭上一把手,送你一程。 整条线路除了拥有后端整个技术体系外,还涵盖了前端、大数据、云计算、运维等各…

【telnet 命令安装】centos8 linux下安装telnet命令

在CentOS 8上安装Telnet服务,您需要分别安装Telnet客户端和服务器端。以下是安装步骤的概述: 检查是否已安装Telnet: 您可以使用rpm命令来检查系统是否已经安装了Telnet客户端或服务器端。例如: rpm -qa | grep telnet-client rpm…

OWASP发布十大开源软件安全风险及应对指南

​ 最近爆发的XZ后门事件,尽管未酿成Log4j那样的灾难性后果,但它再次敲响了警钟:软件供应链严重依赖开源软件,导致现代数字生态系统极其脆弱。面对层出不穷的安全漏洞,我们需要关注开源软件 (OSS)风险 ,改进…

Web前端笔记1.0【Html详解,CSS详解】【Js待完善】

Web前端 html5 html5是构建web前端内容的一种语言描述方式 标签 标签分类 单标签&#xff1a;<input type text"> 双标签语法规范&#xff1a;<标签名> <标签名> 内容 </标签名></标签名> (可相互嵌套&#xff09; 常用标签 标题标…

在不使用PageHelper或Mybatis的情况下实现手动分页

有些特殊情况下我们不需要查库但前端数据需要分页&#xff0c;我们就需要手写分页实现&#xff0c;比如在线用户的功能我们可能会去Redis中查有哪些用户&#xff0c;然后返回给前端&#xff0c;但前端需要分页处理&#xff0c;我们就需要实现手动分页&#xff0c;话不多说直接上…

超越边界:如何ChatGPT 3.5、GPT-4、DALL·E 3和Midjourney共同重塑创意产业

KKAI&#xff08;kkai人工智能&#xff09;是一个整合了多种尖端人工智能技术的多功能助手平台&#xff0c;融合了OpenAI开发的ChatGPT3.5、GPT4.0以及DALLE 3&#xff0c;并包括了独立的图像生成AI—Midjourney。以下是这些技术的详细介绍&#xff1a; **ChatGPT3.5**&#xf…

vue 请求php接口 header 传自定义参数 提示cors 跨域问题

前端地址 http://192.168.0.125:4021 请求后端地址的时候报 from origin http://192.168.0.125:4021 has been blocked by CORS policy: Request header field userid is not allowed by Access-Control-Allow-Headers in preflight response. 大概意思是请求 header里有个…

递归算法/斐波那契数列

目录 递归 直接递归 间接递归 思想沿用 斐波那契数列 图片来源网络&#xff0c;侵权联系可删 递归 递归&#xff08;Recursion&#xff09;是一种编程技术&#xff0c;其中函数或方法直接或间接地调用自身。递归通常用于解决可以分解为更小、更简单的子问题的问题。递归的…

抗D盾是什么,为什么游戏被攻击了需要抗D盾

游戏行业DDoS攻击的主要原因是因为游戏产品生命周期偏短&#xff0c;而DDoS供给成本又不高&#xff0c;只要发起攻击&#xff0c;企业为确保游戏稳定运营而不得不快速做出让步&#xff0c;致使敲诈勒索的成功率相对更高。在遭受DDoS攻击后&#xff0c;游戏公司的日损失甚至多达…

[Flutter3] 记录Dio的简单封装(一)

文章目录 效果使用ResponseEntity类DioManager封装_onResponse / _onDioException 的设计Response的处理catch处理 效果 请求成功/失败/异常的日志输出效果 成功: 失败:500 失败:404 网络异常: 使用 举个使用的例子, 在调用 DioManager的时候, 直接通过返回值的状态, 来…

世强硬创获昕感科技授权代理,SiC MOSFET实现超低导通电阻

近日&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”&#xff09;获北京昕感科技有限责任公司&#xff08;下称“昕感科技”&#xff0c;英文名&#xff1a;NEXIC&#xff09;授权代理&#xff0c;为光伏、储能、电网、新能源汽…

【芯片科普】运算放大器用作比较器的注意事项

运算放大器和比较器 比较器和运算放大器电气符号非常相像&#xff0c;都是有反相、同相两个输入端和一个输出端的器件&#xff0c;输出端的输出电压范围一般在供电的轨到轨之间&#xff1b;同时比较器和运算放大器都具有低偏置电压、高增益和高共模抑制比的特点。 图1 运算放…

第十五届蓝桥杯省赛第二场C/C++B组F题【狡兔k窟】题解(AC)

题意分析 有一个 n n n 个点&#xff0c; n − 1 n-1 n−1 条边的无向图&#xff0c;边权均为 1 1 1。 每个点隶属于一个集合&#xff0c;同一个集合的点可以互相传送。 给定 m m m 个询问&#xff0c;求 x , y x, y x,y 的最短距离。 最短路解法 步骤&#xff1a; 建…

4.7 海思SS928开发 - uboot开发 - 自定义分区以及启动方案

4.7 uboot开发 - 自定义分区以及启动方案 ss928 出厂默认的启动方式以及 emmc 默认的分区&#xff0c;不符合需求&#xff0c;考虑自己做一个分区方案以及启动方案。 分区方案 分区表如下&#xff1a; 分区文件系统分区说明fastboot-存放 bootloaderubootenv-存储 uboot 环境…

jenkins修改全局安全配置之后登录错误

教训&#xff08;流泪&#xff09; 事情是这样的&#xff0c;第一次我需要用单点登录集成jenkins&#xff0c;jenkins可以通过插件的方式支持cas协议&#xff0c;我当时也不很懂&#xff0c;经过我学网上的一顿乱配置&#xff0c;jenkis上不去了&#xff0c;虽然这是公司本地环…

Nginx 配置 SSL(HTTPS)详解

Nginx作为一款高性能的HTTP和反向代理服务器&#xff0c;自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL&#xff0c;实现HTTPS的访问。 随着互联网安全性的日益重要&#xff0c;HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务…

C语言----枚举

当我们看过了结构体和联合体&#xff0c;那么我们接下来就将学习枚举。这也许对大家又是一个新的知识点。大家不要急&#xff0c;我来给大家简单的总结一下。先看名字&#xff0c;枚举就是一个个列举。这样大家应该比较熟悉吧。如一周有七天。这个肯定要分开列举出来吧&#xf…

LLMs——扩展数据受限的语言模型解决方案

概述 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大型语言模型的发展一直是研究的热点。这些模型通过增加参数数量和训练数据量来提升性能&#xff0c;但这种增长趋势是否会有一个极限&#xff1f;实际上&#xff0c;研究者们已经注意到&#xff0c;为了有效地…

03-JAVA设计模式-观察者模式

观察者模式 什么是观察者模式 Java中的观察者模式是一种常见的设计模式&#xff0c;它允许对象&#xff08;观察者&#xff09;订阅另一个对象&#xff08;被观察者&#xff09;的状态变化&#xff0c;并在状态变化时自动得到通知。 核心&#xff1a; 观察者模式主要用于1&a…