前言

在学习了监听器之后,可以使用MouseListener接口和Graphics类设计一个简单画图板。

一、画图板

1.坐标系统

  • 在 java 中,坐标原点(0,0)位于左上角,以像素为单位
  • 以水平向右为横轴x,以水平向下为纵轴y

2.MouseListener 接口

  • MouseListener接口用于监听组件上的鼠标事件(点击、按下、释放等)。
  1. 创建一个类 实现 监听器接口
  2. 重写接口中的方法 改分号为大括号
    注意:其中所有方法都必须重写
  3. 给括号中添加一段 事件触发之后的代码
  4. 回到界面类中 创建一个监听器的对象
  5. 给需要监听的组件 添加添加

3.Graphics类

  • Graphics 类用于在组件上进行绘图操作。它提供了绘制各种图形、文本和图像的方法。图形类 GPU 改变窗体上的像素点的颜色。
  • Graphics 类常用方法:
  1. 设置绘图属性

    · 设置绘图颜色

    setColor(Color c)
    参数:
    Color c:目标颜色

    · 设置绘图字体

    setFont(Font font)
    参数:
    Font font:目标字体

  2. 绘制基本图形

    · 绘制直线

    drawLine(int x1, int y1, int x2, int y2)
    形参:
    int x1, y1:起点坐标
    int x2, y2:终点坐标

    · 绘制矩形边框

    drawRect(int x, int y, int width, int height)
    参数:
    int x, y:矩形左上角的坐标
    int width, height:矩形的宽度和高度

    · 绘制填充矩形

    fillRect(int x, int y, int width, int height)
    参数:
    int x, y:矩形左上角的坐标
    int width, height:矩形的宽度和高度

    · 绘制圆形边框

    drawOval(int x, int y, int width, int height)
    参数:
    int x, y:圆外切矩形左上角的坐标
    int width, height:圆外切矩形的宽度和高度

    · 绘制填充圆形

    fillOval(int x, int y, int width, int height)
    参数:
    int x, y:圆外切矩形左上角的坐标
    int width, height:圆外切矩形的宽度和高度

    · 绘制文字

    drawString(String str, int x, int y)
    参数:
    String str:要绘制的字符串
    int x, y:字符串的起始坐标

二、创建步骤

1.界面类

  1. 创建一个类 DrawUI 其中声明一个方法 showUI方法
  2. 在showUI方法中创建一个窗体类对象 设置好属性
  3. 创建一个监听器类对象 使用窗体对象添加鼠标监听器
import javax.swing.*;
import java.awt.*;

public class DrawUI {

    public void showUI() {

        // 创建窗体类对象 命名为 jf
        JFrame jf = new JFrame();

        // 设置属性:
        //标题:setTitle 参数:字符串
        jf.setTitle("画图板");

        // 宽高:setSize 参数:宽 高
        jf.setSize(800, 500);

        //位置:setLocationRelativeTo 默认居中显示
        jf.setLocationRelativeTo(null);

        //关闭模式:setDefaultCloseOperation 参数:JFrame.EXIT_ON_CLOSE
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置布局给窗体
        //显示窗体:setVisible 参数:true
        jf.setVisible(true);
        jf.setResizable(false);


        //画笔:图形画在哪个组件上,画笔就从该组件上获取
        //从窗体上获取画笔对象,一定要在窗体显示可见之后
        Graphics g = jf.getGraphics();
        // 创建一个监听器类对象
        DrawListen dl = new DrawListen();
        //给窗体添加鼠标监听器方法
        jf.addMouseListener(dl);
        dl.g2 = g;


    }

    public static void main(String[] args) {

        DrawUI ui = new DrawUI();
        ui.showUI();

    }


}

2.监听器类

  1. 创建一个类DrawListen 实现 鼠标监听器接口
  2. 重写鼠标监听器接口的五个方法
  3. 每个方法写一段输出语句 ,也可以获取鼠标操作时的坐标
    MouseEvent e 鼠标事件参数对象 获取鼠标操作时的相关数据 其中包含了坐标
    int x = e.getX();
    int y = e.getY();
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListen implements MouseListener {

    Graphics g2;
    int x1, y1, x2, y2;

    public void mouseClicked(MouseEvent e) {
        System.out.println("鼠标点击了");
    }

    public void mousePressed(MouseEvent e) {
        System.out.println("鼠标按下了");
        x1 = e.getX();
        y1 = e.getY();
        System.out.println(x1 + " " + y1);
    }

    public void mouseReleased(MouseEvent e) {
        System.out.println("鼠标抬起了");
        x2 = e.getX();
        y2 = e.getY();
        System.out.println(x2 + " " + y2);
    }

    public void mouseEntered(MouseEvent e) {
        System.out.println("鼠标进入");
    }

    public void mouseExited(MouseEvent e) {
        System.out.println("鼠标离开");
    }

}

  1. 绘制基本图形
  • 绘制直线
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListen implements MouseListener {

    Graphics g2;
    int x1, y1, x2, y2;

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
        System.out.println(x1 + " " + y1);
    }

    public void mouseReleased(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        System.out.println(x2 + " " + y2);

        // 直线
        g2.setColor(Color.black);
        g2.drawLine(x1, y1, x2, y2);

    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

}

在这里插入图片描述

  • 绘制矩形边框
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListen implements MouseListener {

    Graphics g2;
    int x1, y1, x2, y2;

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
        System.out.println(x1 + " " + y1);
    }

    public void mouseReleased(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        System.out.println(x2 + " " + y2);

        // 矩形
        // 左上角的坐标 宽度 高度
        int x = x1;
        int y = y1;
        int w = x2 - x1;
        int h = y2 - y1;
        if (x2 < x1) {
            w = -w;
            x = x2;
        }

        if (y2 < y1) {
            h = -h;
            y = y2;
        }
        g2.drawRect(x, y, w, h);

    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

}

在这里插入图片描述

  • 绘制填充矩形
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListen implements MouseListener {

    Graphics g2;
    int x1, y1, x2, y2;

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
        System.out.println(x1 + " " + y1);
    }

    public void mouseReleased(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        System.out.println(x2 + " " + y2);

        // 矩形
        // 左上角的坐标 宽度 高度
        int x = x1;
        int y = y1;
        int w = x2 - x1;
        int h = y2 - y1;
        if (x2 < x1) {
            w = -w;
            x = x2;
        }

        if (y2 < y1) {
            h = -h;
            y = y2;
        }
        g2.fillRect(x, y, w, h);

    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

}

在这里插入图片描述

  • 绘制圆形边框
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListen implements MouseListener {

    Graphics g2;
    int x1, y1, x2, y2;

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
        System.out.println(x1 + " " + y1);
    }

    public void mouseReleased(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        System.out.println(x2 + " " + y2);

        // 矩形
        // 左上角的坐标 宽度 高度
        int x = x1;
        int y = y1;
        int w = x2 - x1;
        int h = y2 - y1;
        if (x2 < x1) {
            w = -w;
            x = x2;
        }

        if (y2 < y1) {
            h = -h;
            y = y2;
        }
        g2.drawOval(x, y, w, h);

    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

}

在这里插入图片描述

  • 绘制填充圆形
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListen implements MouseListener {

    Graphics g2;
    int x1, y1, x2, y2;

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
        System.out.println(x1 + " " + y1);
    }

    public void mouseReleased(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        System.out.println(x2 + " " + y2);

        // 矩形
        // 左上角的坐标 宽度 高度
        int x = x1;
        int y = y1;
        int w = x2 - x1;
        int h = y2 - y1;
        if (x2 < x1) {
            w = -w;
            x = x2;
        }

        if (y2 < y1) {
            h = -h;
            y = y2;
        }
        g2.fillOval(x, y, w, h);

    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

}

在这里插入图片描述

  • 绘制文本
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListen implements MouseListener {

    Graphics g2;
    int x1, y1, x2, y2;

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
        System.out.println(x1 + " " + y1);
    }

    public void mouseReleased(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        System.out.println(x2 + " " + y2);

        // 文本
        Font f = new Font("微软雅黑",Font.BOLD,70);
        g2.setFont(f);
        g2.drawString("Hello World",x1,y1);

		//立体文本
		        Font f = new Font("微软雅黑",Font.BOLD,70);
        g2.setFont(f);
        for (int i = 0; i < 30; i++) {
            Color color = new Color(255-i*8,255-i*8,255-i*8);
            g2.setColor(color);
            g2.drawString("Hello World",x1+10+i,y1+i);
        }

    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

}

在这里插入图片描述

在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐