简易画图工具的实现步骤

简易画图工具的实现步骤 序言绘图工具作为一个常见的工具经常出现在大众的视野里比如画师常用的Procreate、教师教学常用的希沃白板等都有包含绘图工具因此绘图工具的编程就显得尤为重要。继上篇笔记中提到的监听器的使用步骤这篇笔记让我们继续使用监听器实现简易的绘图工具。一、相关新概念鼠标监听(MouseListener)专门用来监听鼠标按下、松开、点击等操作画笔(Grapbics)可以画直线、矩形、等腰三角形等图形二、整体实现思路整个程序分成两类窗体类DrawUI负责创建窗口、设置大小、显示窗口、绑定监听器、传递画笔。简单说负责搭建画布窗口监听器类DrawListener负责监听鼠标的动作、记录坐标、执行画图代码。简单说负责听鼠标指令、实现画画行为的进行运行逻辑打开窗体 → 绑定鼠标监听器 → 鼠标按下存起点 → 鼠标松开存终点 → 根据两点坐标画出对应图形三、实现步骤步骤1创建窗体DrawUI[必须等窗体实现可视化setVisible(true) 之后再获取画笔]步骤2创建鼠标监听器DrawListener实现 MouseListener 接口2.重写全部5个鼠标抽象方法常用:mouseClick:点击mousePressed:按下mouseReleased:松开非常用:MouseEntered、mouseExited步骤3三种图形绘图逻辑1.绘制线段(drawLine)连接起点和终点两个坐标2.绘制矩形(drawRect)终点横坐标和起点横坐标之差即为该矩形的宽中点纵坐标和起点纵坐标之差即为该矩形的高3.绘制等腰三角形三条线段的拼接四、实操展示1.线段代码展示package sy0826; import javax.swing.*; import java.awt.*; public class DrawUI { public void initUI() { JFrame jf new JFrame(); jf.setSize(900, 900); jf.setTitle(画图工具); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); jf.setVisible(true); Graphics g jf.getGraphics(); DrawListener listener new DrawListener(); jf.addMouseListener(listener); listener.gr g; } public static void main(String[] args) { DrawUI ui new DrawUI(); ui.initUI(); } }package sy0826; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class DrawListener implements MouseListener { public Graphics gr; public int x1, y1, x2, y2 ; public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { x1 e.getX(); y1 e.getY(); } public void mouseReleased(MouseEvent e) { x2 e.getX(); y2 e.getY(); gr.drawLine(x1, y1, x2, y2); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }运行结果2.矩形代码展示package fsy0826; import sy0826.DrawListener; import sy0826.DrawUI; import javax.swing.*; import java.awt.*; public class DrawUI1 { public void initUI() { JFrame jf new JFrame(); jf.setSize(900, 900); jf.setTitle(画图工具); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); jf.setVisible(true); Graphics g jf.getGraphics(); DrawListener1 listener new DrawListener1(); jf.addMouseListener(listener); listener.gr g; } public static void main(String[] args) { DrawUI1 ui new DrawUI1(); ui.initUI(); } }package fsy0826; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class DrawListener1 implements MouseListener{ public Graphics gr; public int x1, y1, x2, y2; public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { x1 e.getX(); y1 e.getY(); } public void mouseReleased(MouseEvent e) { x2 e.getX(); y2 e.getY(); int wx2-x1; int hy2-y1; gr.drawRect(x1,y1,w,h); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }运行结果3.等腰三角形代码展示package Afsy0826; import fsy0826.DrawListener1; import fsy0826.DrawUI1; import javax.swing.*; import java.awt.*; public class DrawUI2 { public void initUI() { JFrame jf new JFrame(); jf.setSize(900, 900); jf.setTitle(画图工具); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); jf.setVisible(true); Graphics g jf.getGraphics(); DrawListener2 listener new DrawListener2(); jf.addMouseListener(listener); listener.gr g; } public static void main(String[] args) { DrawUI2 ui new DrawUI2(); ui.initUI(); } }package Afsy0826; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class DrawListener2 implements MouseListener{ public Graphics gr; public int x1, y1, x2, y2; public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { x1 e.getX(); y1 e.getY(); } public void mouseReleased(MouseEvent e) { x2 e.getX(); y2 e.getY(); gr.drawLine(x1,y2,(x1x2)/2,y1); gr.drawLine((x1x2)/2,y1,x2,y2); gr.drawLine(x1,y2,x2,y2); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }运行结果个人收获总结通过本次对画图工具编程的学习和实操我学会了线段、矩形和等腰三角形的绘制方法同时也熟悉了鼠标监听器的执行流程。加深了对画图工具编程的理解也懂得要理清窗体与监听器之间的数据传递关系。