java 坐标体系与绘图

举报
Cyan_RA9 发表于 2023/05/04 16:30:10 2023/05/04
【摘要】 java 坐标体系与绘图 内容分享。

目录

一、坐标体系

        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轴,代表竖直方向如下图所示 : 

image.png

        其中,(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 : 所要画的椭圆的高度
         */
    }
}

image.gif

                运行结果 : 

image.png

        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);
    }
}

image.gif

                运行效果 : 

image.png

                 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);
    }
}

image.gif

                运行效果 :  

image.png

                 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);
    }
}

image.gif

                运行效果 : 

image.png

                 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);
    }
}

image.gif

                运行效果 :   

image.png

                 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);
    }
}

image.gif

                运行效果 : 

image.png

                 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);
    }
}

image.gif

                运行效果 : 

image.png

三、事件处理机制

        1. 概述 : 

        java的事件处理采用“委派事件模型”。——当事件发生时,产生该事件的对象,并把相关信息传递给“事件的监听者”处理

        其中,

        事件源,就是指用户的操作,可以是一个按钮,也可以是一个窗口,即产生事件的对象;

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

        示意图如下 : 

image.png

        2.事件监听器接口 : 

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

        一个类可以实现多个事件监听器接口。事件监听器接口有很多种,对应监听不同的事件。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。