Java 简易画图工具实现教程:从界面到鼠标绘图

介绍

作为一名 Java 初学者,在学习 Java 图形界面编程(GUI)的过程中,我尝试开发了一个简易的画图工具。这个小项目让我对 Java 的 AWT(Abstract Window Toolkit)和 Swing 组件有了更直观的认识,也体验到了从代码到图形界面交互的乐趣。

这个画图工具的界面不算复杂,上方设置了一排功能按钮,像直线、矩形、等腰三角形、三角形、多边形、曲线绘制,还有橡皮擦功能以及颜色选择窗口。下方则是一块空白的绘图区域,供我们发挥创意,绘制各种图形。

在开发过程中,我主要运用了 Java 的事件监听机制来实现交互。比如,当点击 “直线” 按钮时,程序要能捕获到这个点击事件,然后在绘图区域,根据鼠标的按下和释放动作,确定直线的起点和终点,进而绘制出直线。对于不同图形,都需要编写对应的逻辑来处理鼠标事件,计算图形的各项参数,再利用 Graphics 类的绘图方法将图形呈现出来。

虽然这个画图工具还比较基础,可能在功能完善度、界面美观度等方面还有很大的提升空间,但对于我这样的初学者来说,它是一个很好的实践载体,帮助我把书本上的 Java GUI 知识转化为实际可操作的项目,也让我对面向对象编程在图形界面开发中的应用有了更深的理解。接下来,我会继续优化这个工具,比如添加更多图形样式、完善颜色选择功能等,在实践中不断提升自己的 Java 编程能力。

目录

1.显示画图工具的界面(功能按钮)

 2.监听器:鼠标监听器方法 

 3.画笔:在界面程序中显示图形

过程

步骤 1:搭建画图工具界面(Swing 窗体)

1.1显示画图工具的界面

public class DrawUI{

  //属性

  //方法(显示画图工具的方法)

   Public void initUI(){

     JFrame jf = new JFrame

//爆红了就加头文件

1.2 然创建一个窗体

1.3 设置可见

Jf.setVisible(true); 

1.4 加上主函数

public static void main (String [] args){w

DrawUI ui = new DrawUI ();

ui.initUI();

最后就可以实现下面图片的内容

步骤 2:实现鼠标监听器(处理绘图交互) 

//监听器

事件源:窗体

2.1  给窗体添加鼠标监听器方法

Jf.addMoudeListener();

2.2  绑定处理类

1.按住Ctrl 点击鼠标监听器查参他的数据类型(引用类型  接口 关键词interface)

2.重新定义一个类  DrawListener (处理类)

Public  class  DrawListener  implement  MoudeListener

注意;接口,我们要用调用监听器的方法查看需要怎样接口

如果报错了就加头文件,然后重新接口中的所有的抽象方法,进入到接口中复制接口的抽象方法(这个抽象方法同时也是事件处理方法)

3.然后我们要用处理类的对象跟监听器绑定一下

MoudeListener listener =new MoudeListener();

Jf.addActionLitener (listener);

2.4 然后给抽象方法加上输出语句

1.System.out.println(“点击”)
   System.out.println(“按下”)
   System.out.println(“松开”)

如下图

2.运行后,可以发现想要移动鼠标就没有点击,只有按下松开

3.所以我们想要画出图形比如线段,我们只会用到鼠标监听器的按下松开.

步骤 3 添加画笔

//画笔:图形内容显示在哪个组件上获取,画笔就从该组件上获取

3.1 从窗体上获取对象(一定要要在窗体显示之后)

Jf.getGraphics             

//  jf 是窗体的对象

3.2 查看返回值,反回值类型是Graphics

3.3所以我们要用相同返回值的变量来保存 Graphics g = jf.getgraphics();

如果爆错就加头文件

步骤4. 引用传递

4.1 通过对象调用属性

画笔对象的数据类型是Graphics

1.在处理类加上 Public Graphics gr ;  
2.在DrawUI的类里加上 Listener.gr = g  

步骤5.绘制图形

5.1 在抽象方法下添加gr.drawLine();

1.然后就会出现坐标,然后前面也说过所以我们想要画出图形比如线段,我们只会用到鼠标监听器的按下和松开

2.所以我们需要在抽象方法的输出语句 按下,获取当前坐标。

5.2 通过参数MouseEvent e,去用e这个对象来获取当前位置

e.get x ();

e.get y ();

查看返回值都是int

5.3 定义变量保存

Int x1= e.get x ();

Int y1= e.get y ();

5.4.抽象方法的输出语句松开也用这个方法

Int x2= e.get x ();

Int y2= e.get y ();

5.5 然后把坐标加到绘画图形下面

gr.drwaline (x1,y1,x2,y2)

如果报错,就是出现了局部变量 

局部变量分别为两种

1.在方法中定义的变量  //方法也叫作用域:一对大括号它就是一个独立的作用域

2.方法的参数(MouseEvent e )

而MouseEvent e 是局部变量  

5.6.用全局变量去解决:属性

把x1,y1,x2,y2变成全局变量

Public int x1,y1,x2,y2;

注意:当我们在上面定义好属性,在下面保存数据的过程中,int x1要去掉int(整形),如果不去掉就是在重新定义变量 (X,Y要大写

5.7 实现画直线的功能

画出其他图形

增添功能按钮

然后会发现整个按钮都在真中间

添加流式布局

`

再次添加按钮

实现功能

给按钮加加监听器

addActionlistener的返回值是interface(接口)

然后在子类里添加接口

//子类可以添加多个接口

//实现接口publiuc class 子类 implement 接口,接口,,,{}

重写接口中的抽象方法

给动作监听器绑定对象

//listener是监听器绑定的对象,因为DrawListener这个类绑定了两个接口,它既可以处理鼠标监听器也可以处理动作监听器.

//要把这个对象写在上面,因为代码是按照顺序原则,如果写在监听器的下面,动作监听器是无法识别到这个对象的.

识别按钮

//如果识别不到,那监听就是没有意义的

获取按钮上的类容

//利用ActionEvent e 的对象e,用这个对象获取类容然后用变量去去保存这个类容

//额e.getActionCommang 的返回值是String

在处理类添加画笔,画出矩形和三角形

用if循环去判断当前的name

//这样可以限制每次画图画出一个

//在画图形之前去判断当前这个name是什么类容,然后他就可以进入对应的判断语句

//爆红是因为局部变量的问题

把局部变量改成全局变量

//所以把name定义成属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值