java 坐标体系与绘图

news2024/10/4 7:20:19

目录

一、坐标体系

        1.像素 : 

        2.坐标系 : 

二、绘图

        1.机制 : 

        2.实例 : 

        3.原理 : 

        4.常用绘图方法 : 

                1° setColor(Color c) : 设置画笔颜色

                 2° drawLine(int x1, int y1, int x2, int y2) : 画直线

                 3° drawRect(int x, int y, int width, int height) : 画矩形边框

                 4° fillRect(int x, int y, int width, int height) : 画填充矩形

                 5° drawImage(image img, int x, int y, int width, int heght, ImageObserver observer) : 画图片

                 6° setFont(Font font) : 设置画笔的字体

                 7° drawString(String str, int x, int y) : 画字符串

三、事件处理机制

        1. 概述 : 

        2.事件监听器接口 :


一、坐标体系

        1.像素 : 

        在一个由数字序列表示的图像中的一个最小单位,称为像素。计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。
        eg : 某一个计算机显示器的分辨率是1440 * 900,表示该显示器每一行由1440个像素构成,共900行;或者说每一列由900个像素构成,共1440列。而整个显示器屏幕共有1440 * 900 = 1296000个像素。
        注意 : 像素不是一个长度单位,因此直接比较像素没有意义;像素只是一个相对的表示图像的最小单位,如果该显示器是确定的,那么像素更像是一个密度单位

        2.坐标系 : 

        在java的坐标系中,像素为基本单位坐标原点位于坐标系的左上角,向右水平延伸是x轴,代表水平方向;垂直x轴向下延伸即是y轴,代表竖直方向如下图所示 : 

        其中,(x, y)表示水平方法x个像素,竖直方向y个像素


二、绘图

        1.机制 : 

        画框——定义一个测试类去继承JFrame类,该测试类相当于一个画框。

        画板——定义一个类去继承JPanel类;该类的一个实例化就是一个画板

        画笔——paint方法中的形参(Graphics g)就是一个画🖊。(Graphics类中提供了大量绘图的方法。)paint方法中要存放绘图信息(即画什么)。

        2.实例 : 

                以PaintOval类为演示类,画一个椭圆代码如下 : 

package csdn.advanced.draw;

import javax.swing.*;
import java.awt.*;

public class PaintOval extends JFrame {
    public static void main(String[] args) {
        new PaintOval();    //实例化画框即可作画。
    }

    //1.定义画板(显式初始化为null)
    private Sketchpad sketchpad = null;


    public PaintOval() {
    //2.初始化画板
        sketchpad = new Sketchpad();
    //3.将画板嵌入画框
        this.add(sketchpad);
    //4.设置画板的大小(绘图区域)
        this.setSize(750, 500);
        this.setVisible(true);  //true表示可见
    //5.设置点击“x”按钮即可退出程序
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Sketchpad extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g); //注意 : 一定要使用带参数的父类的paint方法。
        //画一个特殊的椭圆(圆形)
        g.drawOval(200, 200, 400, 200);
        /*
            drawOval方法的四个形参:
            1° x : 起笔处的x坐标
            2° y : 起笔处的y坐标
            3° width : 所要画的椭圆的宽度
            4° height : 所要画的椭圆的高度
         */
    }
}

                运行结果 : 

        3.原理 : 

        Component类提供了两个与绘图相关的最重要的方法——

        paint(Graphics g) : 绘制组件的外观;

        repaint() : 刷新组件的外观;

        PS : paint方法会在以下情况被调用——

        组件第一次在屏幕上显示时,程序会自动地调用paint方法来绘制组件;

       窗口改变大小时,同上;

       当窗口被最小化,又重新显示时,同上;

        repaint方法被调用时,同上;

        4.常用绘图方法 : 

                1° setColor(Color c) : 设置画笔颜色

                eg : (在上文PaintOval类代码的基础上更改),代码如下 : 

package csdn.advanced.draw;

import javax.swing.*;
import java.awt.*;

public class PaintOval extends JFrame {
    public static void main(String[] args) {
        new PaintOval();
    }

    private Sketchpad sketchpad = null;


    public PaintOval() {
        sketchpad = new Sketchpad();
        this.add(sketchpad);
        this.setSize(750, 500);
        this.setVisible(true);  //true表示可见
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Sketchpad extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.CYAN);
        g.drawOval(200, 200, 400, 200);
        g.setColor(Color.cyan);
        g.drawOval(50, 50, 200, 200);
    }
}

                运行效果 : 

                 2° drawLine(int x1, int y1, int x2, int y2) : 画直线

                其中,(x1, y1)代表起笔处;(x2, y2)代表收笔处。    
                eg : 代码如下 : 

package csdn.advanced.draw;

import javax.swing.*;
import java.awt.*;

public class PaintOval extends JFrame {
    public static void main(String[] args) {
        new PaintOval();
    }
    private Sketchpad sketchpad = null;

    public PaintOval() {
        sketchpad = new Sketchpad();
        this.add(sketchpad);
        this.setSize(750, 500);
        this.setVisible(true);  //true表示可见
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Sketchpad extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.pink);
        g.drawLine(100, 300, 500, 300);
        g.setColor(Color.cyan);
        g.drawLine(100, 150, 300, 150);
    }
}

                运行效果 :  

                 3° drawRect(int x, int y, int width, int height) : 画矩形边框

                其中,(x, y)代表起笔处;width代表矩形的宽度;height代表矩形的高度
                eg : 代码如下 : 

package csdn.advanced.draw;

import javax.swing.*;
import java.awt.*;

public class PaintOval extends JFrame {
    public static void main(String[] args) {
        new PaintOval();
    }
    private Sketchpad sketchpad = null;

    public PaintOval() {
        sketchpad = new Sketchpad();
        this.add(sketchpad);
        this.setSize(750, 500);
        this.setVisible(true);  //true表示可见
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Sketchpad extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.pink);
        g.drawRect(50, 200, 500, 200);
        g.setColor(Color.cyan);
        g.drawRect(100, 100, 350, 150);
    }
}

                运行效果 : 

                 4° fillRect(int x, int y, int width, int height) : 画填充矩形

                其中,(x, y)代表起笔处;width代表矩形的宽度;height代表矩形的高度
                eg : 代码如下 : 

package csdn.advanced.draw;

import javax.swing.*;
import java.awt.*;

public class PaintOval extends JFrame {
    public static void main(String[] args) {
        new PaintOval();
    }
    private Sketchpad sketchpad = null;

    public PaintOval() {
        sketchpad = new Sketchpad();
        this.add(sketchpad);
        this.setSize(750, 500);
        this.setVisible(true);  //true表示可见
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Sketchpad extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.pink);
        g.fillRect(100, 200, 500, 200);
        g.setColor(Color.cyan);
        g.fillRect(100, 100, 350, 50);
    }
}

                运行效果 :   

                 5° drawImage(image img, int x, int y, int width, int heght, ImageObserver observer) : 画图片

                其中,img表示图片对象(固定格式),(x, y)仍然代表起笔处,width代表图片的宽度,height代表图片的高度,最后要传入一个this
                eg : 代码如下 : 

package csdn.advanced.draw;

import javax.swing.*;
import javax.tools.Tool;
import java.awt.*;

public class PaintOval extends JFrame {
    public static void main(String[] args) {
        new PaintOval();
    }
    private Sketchpad sketchpad = null;

    public PaintOval() {
        sketchpad = new Sketchpad();
        this.add(sketchpad);
        this.setSize(750, 500);
        this.setVisible(true);  //true表示可见
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Sketchpad extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        /*
            这里的文件需要传入的是路径。
         */
        Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Five\\Desktop\\ty.jpg");
        g.drawImage(image, 50, 50 , 300, 350, this);
    }
}

                运行效果 : 

                 6° setFont(Font font) : 设置画笔的字体

                其中,可以更改字体的字体样式,字体粗细,字号等属性

                 7° drawString(String str, int x, int y) : 画字符串

                其中,(x, y)代表的是字符串左下角的坐标(注意)
                eg : 代码如下 :  

package csdn.advanced.draw;

import javax.swing.*;
import java.awt.*;

public class PaintOval extends JFrame {
    public static void main(String[] args) {
        new PaintOval();
    }
    private Sketchpad sketchpad = null;

    public PaintOval() {
        sketchpad = new Sketchpad();
        this.add(sketchpad);
        this.setSize(750, 500);
        this.setVisible(true);  //true表示可见
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class Sketchpad extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.cyan);
        g.setFont(new Font("楷体", Font.BOLD, 50));   //BOLD表示加粗
        g.drawString("Cyan_RA9", 100, 233);
    }
}

                运行效果 :  

三、事件处理机制

        1. 概述 : 

        java的事件处理采用“委派事件模型”。——当事件发生时,产生该事件的对象,并把相关信息传递给“事件的监听者”处理
        其中,
        事件源,就是指用户的操作,可以是一个按钮,也可以是一个窗口,即产生实现的对象;

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

        示意图如下 : 

        2.事件监听器接口 : 

         当事件源产生了一个事件,可以传送给事件监听器处理。此处的事件监听器——本质上就是一个实现了事件监听器接口的类。(eg : 画板类实现KeyListener接口)。
​​​​​​​        一个类可以实现多个事件监听器接口。事件监听器接口有很多种,对应监听不同的事件。

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

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

相关文章

【密码学复习】第六讲 HASH函数和MAC(三)

H是一个Hash函数 K表示密钥 B表示计算消息摘要时消息分块的字节长度(对MD5和SHA-1是512比特,64字节) L表示消息摘要按字节计算的长度(对MD5是16字节) ipad表示0x36重复B次,opad表示0x5c重复B次。 K可以…

腾讯云轻量服务器价格表(2023版)

2023腾讯云轻量应用服务器2核2G4M带宽88元一年、2核4G6M带宽159元/年、4核8G10M优惠价425元、8核16G14M价格1249、16核32G20M服务器2499元一年,今天分享2023腾讯云服务器配置及精准报价。 腾讯云轻量应用服务器优惠价格表 腾讯云服务器分为轻量应用服务器和云服务器…

Games106学习记录第一课

本文地址:https://blog.csdn.net/t163361/article/details/130139998 最近准备申请新星创作者,需要2000个粉丝关注,觉得文章有用的,请点一下左侧边栏的关注,谢谢。 前段时间看到Games106课程,讲的是流水线…

【天梯赛—不想坑队友系列】L1-002 打印沙漏(java)

题目链接 PTA | 程序设计类实验辅助教学平台 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符…

c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%

c/c:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式% 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所知道的周边的会c的同学,可手握10…

Linux主机用WordPress搭建网站

文章目录一、搭建过程1.1、切换到超户1.2、更新1.3、安装一些包1.4、安装wordpress1.5、配置MariaDB1.6、创建WordPress数据库1.7、配置WordPress1.8、登录WordPress1.9、安装phpMyAdmin一、搭建过程 1.1、切换到超户 sudo su1.2、更新 apt-get update -y1.3、安装一些包 a…

我在windows10下,使用CMake gui 编译krita源码

系列文章目录 文章目录系列文章目录前言一、krita编译说明二、使用步骤前言 我在windows10下,使用CMake gui 编译krita源码 where is the source code:E:/krita-dev/krita where to build the binaries:E:/krita-dev/krita_camke current generator:MinGW Makefile…

成为程序员后才知道的6件事,第5点看完很心酸!

曾几时,总觉得IT精英外表光鲜亮丽,尤其是程序员咔咔咔打代码,月入几个w,不光挣得多,上班期间还能玩电脑游戏。但是,真正当了程序员之后,OMG!我再也不这样想了!好多事都是当了程序员才…

【C语言深入】带你了解C语言中的可变参数列表

【C语言深入】带你了解C语言中的可变参数列表一、可变参数函数的使用方式1、使用方式2、自定义可变把参数函数2.1、三个宏一个类型2.2、实现方式二、可变参数列表的原理1、va_start1.1、_ADDRESSOF1.2、关于临时拷贝的一个小知识点1.3、_INTSIZEOF2、va_arg3、va_end一、可变参…

23种设计模式总结(大白话,适合小白)

文章目录什么是设计模式?设计模式的分类创建型模式创建型类类型工厂方法模式创建型对象型抽象工厂模式生成器模式原型模式单例模式结构型模式结构型类类型适配器模式结构型对象型桥接模式组合模式装饰器模式外观模式享元模式代理模式行为型模式行为型对象型命令模式…

【C++PrimerPlus】第五章 循环和关系表达式

文章目录5.1 for循环5.1.1 for循环的组成部分5.1.2 回到for循环5.1.3 修改步长5.1.4 使用for循环访问字符串5.1.5 递增运算符 ()和递减运算符(--)5.1.6 副作用和顺序点5.1.7 前缀格式与后缀格式5.1.8 递增/递减和指针5.1.9 组合赋值运算符5.1.10 复合语句![](https://img-blog.…

Qt Quick - ToolTip

Qt Quick - ToolTip使用总结一、概述二、附带的ToolTip三、延迟和超时四、自定义ToolTip五、定制化一、概述 ToolTip 其实就是ToolTip,所谓ToolTip其实就是一段简短的文本,告知用户控件的功能。它通常置于父控件之上或之下。提示文本可以是任何富文本格…

常用异常检测模型的应用

常用异常检测模型的应用 描述 异常数据检测不仅仅可以帮助我们提高数据质量,同时在一些实际业务中,异常数据往往包含有价值的信息,如异常交易、网络攻击、工业品缺陷等,因此异常检测也是数据挖掘的重要手段。常用的异常检测模型…

【通过Cpython3.9源码看看python字符串拼接:“+”为什么比join低效】

基本说明 Python字符串拼接中,使用join()方法比运算符更高效,主要原因在于字符串对象的不可变性和内存分配策略。 首先,我们要知道Python字符串是不可变的对象。这意味着,每次使用运算符进行字符串拼接时,Python需要…

Vue2-黑马(四)

目录: (1)axios-响应格式 (2)axios-拦截器 (3)vue2-条件渲染 (4)vue2-列表渲染 (1)axios-响应格式 下面看axios的返回响应对象的内部组成 后…

【grpc02】安装protobuf和protoc

目录 Windows环境 下载通用编译器 配置环境变量 安装go专用的protoc的生成器 GoLang中安装插件 如何使用protobuf呢? Mac环境 Protoc安装 Protoc-gen-go的安装 Windows环境 下载通用编译器 下载地址:v3.20.1 Releases protocolbuffers/pr…

【优化算法】使用遗传算法优化MLP神经网络参数(TensorFlow2)

文章目录任务查看当前的准确率情况使用遗传算法进行优化完整代码任务 使用启发式优化算法遗传算法对多层感知机中中间层神经个数进行优化,以提高模型的准确率。 待优化的模型: 基于TensorFlow2实现的Mnist手写数字识别多层感知机MLP # MLP手写数字识别…

Java支付SDK接口远程调试 - 支付宝沙箱环境【公网地址调试】

文章目录1.测试环境2.本地配置3. 内网穿透3.1 下载安装cpolar内网穿透3.2 创建隧道4. 测试公网访问5. 配置固定二级子域名5.1 保留一个二级子域名5.2 配置二级子域名6. 使用固定二级子域名进行访问转发自CSDN远程穿透的文章:Java支付宝沙箱环境支付,SDK接…

Linux命令·traceroute

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统…

移动端项目开发总结(一)

移动端项目开发总结(一) 前阵子做租赁项目,风风火火的上线,趁现在还没忘,把用到的东西整理以下,算是对于这个项目的回顾吧。 特效一 : 移动端适配 需求 移动端适配,采用rem单位。…