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

        其中,(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接口)。
        一个类可以实现多个事件监听器接口。事件监听器接口有很多种,对应监听不同的事件。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_RA9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值