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

【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包中定义列出常用的事件监听器接口
http://www.xdnf.cn/news/12744.html

相关文章:

  • leetcode Top100 238. 除自身以外数组的乘积|数组系列
  • 批量修改文件夹名 修改文件夹名
  • Spring Cloud Alibaba Seata安装+微服务实战
  • 【第九篇】 SpringBoot测试补充篇
  • Zustand 第二章(状态处理)
  • 【设计模式】2.策略模式
  • 【网站建设】不同类型网站如何选择服务器?建站项目实战总结
  • AI智能体|扣子(Coze)搭建【公众号对标文章采集拆解】工作流
  • DeepSeek11-Ollama + Open WebUI 搭建本地 RAG 知识库全流程指南
  • windows10下搭建nfs服务器
  • 【分布式】分布式ID介绍和实现方案总结
  • 力扣算法题1
  • Vue部署到Nginx上及问题解决
  • 深入理解 React Hooks
  • 通过css实现正方体效果
  • 【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
  • C++11 右值引用
  • Pandas-如何正确将两张数据表进行合并
  • 自定义protoc-gen-go生成Go结构体,统一字段命名与JSON标签风格
  • 【Zephyr 系列 15】构建企业级 BLE 模块通用框架:驱动 + 事件 + 状态机 + 低功耗全栈设计
  • github开源协议选择
  • iview-admin静态资源js按需加载配置
  • STM标准库-TIM旋转编码器
  • JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
  • 深入浅出 Arrays.sort(DualPivotQuicksort):如何结合快排、归并、堆排序和插入排序
  • 2025年夏第九届河北工业大学程序设计校赛
  • Linux 上的 Tomcat 端口占用排查
  • 2025-06-08 思考-人被基因和社会关系双重制约
  • Psychopy音频的使用
  • 实验四:图像灰度处理