当前位置: 首页 > article >正文

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系

  • 坐标体系-介绍

    坐标原点位于左上角,以像素为单位。

    在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。

  • 坐标体系-像素

    1. 绘图还必须要搞清一个非常重要的概念-像素 一个像素等于多少厘米?
    2. 计算机在屏幕上显示的内容都是由屏幕上的每 一个像素组成的。例如,计算机显示器的分辨率是800x600,表示计算机屏幕上的每一行由800个点组成,共有600行整个计算机屏幕共有480 000个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较

-Java绘图技术

  • 介绍-快速入门

    在应用界面画一个圆

    package com.xijie.draw;import javax.swing.*;
    import java.awt.*;public class DrawCircle extends JFrame {public static void main(String[] args) {DrawCircle drawCircle = new DrawCircle();}public DrawCircle() {//初始化面板JPanel panel = new MyPanel();//将画板添加到框架this.add(panel);//设置应用程序标题this.setTitle("画一个圆吧!");//设置窗口大小this.setSize(800,600);//显示框架this.setVisible(true);//设置关闭窗口时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
    }class MyPanel extends JPanel {//在绘制面板时自动调用public void paint(Graphics g) {//父类初始化画笔super.paint(g);//获取2D画图对象Graphics2D g2d = (Graphics2D) g;//setcolor设置当前颜色g2d.setColor(Color.red);//填充一个圆形区域g2d.fillOval(50, 50, 100, 100);g2d.setColor(Color.green);//画一个圆形g2d.drawOval(150, 150, 100, 100);g2d.setColor(Color.blue);g2d.drawOval(250, 250, 100, 100);//窗口大小发生变化自动调用paintSystem.out.println("paint方法被调用了");}
    }
  • 绘图原理

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

      1. paint(Graphics g)绘制组件的外观
      2. repaint()刷新组件的外观。
    • 当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件

      在以下情况paint()将会被调用:

      1. 窗口最小化,再最大化
      2. 窗口的大小发生变化
      3. repaint函数被调用
  • Graphics类

    Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法:[参考jdk帮助文档]

    1. 画直线 drawLine(int x1,int y1,int x2,int y)
    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. 画图片 drawlmage(lmage img, int x, int y, …)
    7. 画字符串 drawString(String str, int x, int y)
    8. 设置画笔的字体 setFont(Font font)
    9. 设置画笔的颜色 setColor(Color c)

    演示代码:

    package com.xijie.draw;import javax.swing.*;
    import java.awt.*;public class GraphicFunctions extends JFrame {public static void main(String[] args) {new GraphicFunctions();}public GraphicFunctions() {this.add(new MyPanel1());this.setSize(800, 600);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
    }class MyPanel1 extends JPanel {public void paint(Graphics g) {super.paint(g);g.setColor(Color.red);//1. 画直线 drawLine(int x1,int y1,int x2,int y)g.drawLine(10, 10, 50, 10);//2. 画矩形边框 drawRect(int x, int y, int width, int height)g.drawRect(60, 10, 20, 20);//3. 画椭圆边框 drawOval(int x, int y, int width, int height)g.drawOval(100,10,30,20);//4. 填充矩形 fillRect(int x, int y, int width, int height)g.fillRect(150,10,40,30);//5. 填充椭圆 fillOval(int x, int y, int width, int height)g.fillOval(200,10,35,30);//6. 画图片 drawlmage(lmage img, int x, int y, ..)Image image=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/image/down.jpeg"));g.drawImage(image,250,10,70,40,this);//7. 画字符串 drawString(String str, int x, int y)//8. 设置画笔的字体 setFont(Font font)//9. 设置画笔的颜色 setColor(Color c)g.setColor(Color.blue);g.setFont(new Font("幼圆",Font.ITALIC,20));g.drawString("java牛逼",10,100);}
    }
    

-事件处理机制

  • 小球按键移动案例,按s向下移动小球

    package com.xijie.draw;import javax.swing.*;
    import java.awt.*;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;public class BallMoving extends JFrame {public static void main(String[] args) {new BallMoving();}BallMoving() {MainPanel mainPanel = new MainPanel();this.add(mainPanel);this.addKeyListener(mainPanel);this.setTitle("小球移动测试");this.setSize(800, 600);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
    }class MainPanel extends JPanel implements KeyListener {int x = 0, y = 0;@Overridepublic void paint(Graphics g) {//要调用父类的绘制方法,这样在repaint的时候才能重新绘制图像,而不是堆叠图像super.paint(g);g.setColor(Color.red);g.fillOval(x, y, 100, 100);}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {char keyChar=e.getKeyChar();if(keyChar=='s'){y+=2;this.repaint();}}@Overridepublic void keyReleased(KeyEvent e) {}
    }
    
  • 基本说明

    java事件处理是采取“委派事件模型”。当事件发生时,产生事件的对象,会把此"信息"传递给“事件的监听者"处理,这里所说的"信息"实际上就是 java.awt.event 事件类库里某个类所创建的对象,把它称为"事件的对象”。

  • 机制分析

    1. 用户操作引起事件源;
    2. 事件源被发送到事件监听者(事件处理方法);
    3. 事件处理方法处理事件
  • 事件处理机制深入理解

    1. 前面我们提到几个重要的概念 事件源,事件,事件监听器我们下面来全面的介绍它们。

    2. 事件源:事件源是一个产生事件的对象,比如按钮,窗口等。

    3. 事件:事件就是承载事件源状态改变时的对象,比如当键盘事件、鼠标事件、窗口事件等等,:会生成一个事件对象,该对象保存着当前事件很多信息,比如KeyEvent 对象有含义被按下键的Code值。java.awt.event包 和javax.swing.event包中定义了各种事件类型

    4. 事件类型(查阅JDK文档)

      事件类说明
      ActionEvent通常在按下按钮,或双击一个列表项或选中某个菜单时发生
      AdjustmentEvent当操作一个滚动条时发生
      ComponentEvent当一个组件隐藏,移动,改变大小时发生
      ContainerEvent当一个组件从容器中加入或者删除时发生
      FocusEvent当一个组件获得或失去焦点时发生
      ItemEvent当一个复选框或列表项被选中时,当一个选择框或选择菜单被选中
      KeyEvent当键盘按键被按下或松开时发生
      MousesEvent当鼠标被拖动,移动,点击,按下
      TextEvent当文本区和文本域的文本发生改变时发生
      WindowEvent当一个窗口激活,关闭,失效,恢复,最小化
    5. 事件监听器接口

      1. 当事件源产生一个事件,可以传送给事件监听者处理
      2. 事件监听者实际上就是一个类,该类实现了某个事件监听器接口。比如前面我们案例中的MyPanle就是一个类,它实现了KeyListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理
      3. 事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现多个监听接口
      4. 这些接口在java.awt.event包和javax.swing.event包中定义列出常用的事件监听器接口

相关文章:

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...