使用java进行简易绘图板制作

本文详细介绍了如何使用Java的类与子类、接口、类转换以及方法重写来实现一个绘图板功能,包括按钮监听器、鼠标监听器的实现和数据存储。
摘要由CSDN通过智能技术生成

        下图为一个简易绘图板,他可以选择需要绘制的图形并选取绘制图形的颜色。同时可以在拖动窗体时保持图形不消失。

为了实现绘图板的制作,需要以下准备知识

准备知识

1 类与子类

2 接口

3 类的转换

4 类中方法的重写

1 类与子类

在java中,可以定义父类与子类。子类可以实现对父类的继承。

在写好一个父类之后,可以再写一个类并在类的命名时,在子类名后加上”extends 父类名“以实现对父类的继承。子类继承父类所有的属性和方法。并且子类可以新写父类没有的属性或方法。也可以对父类已有的属性和方法进行重写。

注意,对于类来说,其变量可以时抽象的(未被定义具体数值),但方法一定要是具体的({}中有具体的语句)

2 接口

java中接口和类相互对应。接口的变量要是具体的(有具体数值且加上static final对变量进行修饰),方法是抽象的(只有方法名,{}中没有语句)

在使用接口时,需要新定义一个类并 implements 接口名 以实现对接口的重写,并且一个类可以实现多个接口。并在后续需要时可以对这个类进行传递。(传递的过程现阶段还没见过)

3 类的转换

对于一个对象来说,他所对应的类可能有父类或子类。这种情况下这个对象对应的类可以转化为其父类或子类(主要是为了处理等式两边的类型要对齐的问题)

将子类转化为父类(向上转化)称为自动转型。这是可以随便转的。

UNStudent unStudent = new UNStudent();
Student student = unStudent;

将父类转化为子类(向下转化)称为强制转型。这个转的时候要小心,可能会出问题。(可能多次转换之后出现平级转换的情况,这是不被允许的)

UNStudent unStudent = new UNStudent();
UNStudent unstu1 = (UNStudent) student;

注意,转型看似是定义了一个新的对象然后重新赋值,但实际上只传了地址没有传内容。  也就是说第一个例子中的student和unStudent的地址是完全一样的。如果此时再将student强行转化为high Student就会报错。

之所以向上转型叫自动,向下转型叫强制是因为:向上转型的时候新定义的对象的所有属性和方法都是有的,但向下转型的时候可能会出现有的属性没有定义的情况,相较没那么自然。

4 重写

子类继承父类方法的除操作外的所有性质(方法名,方法类型等),并对操作再写一次。

至此,就可以开始创建一个绘图板了

需要导入的包有

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

我们需要按钮监听器和鼠标监听器(接口)

第一步定义一个UI类

在这个类里面定义一个方法,实现窗口本身的定义(名字,大小,位置,x键的作用,窗口类型)实现按钮的定义(类型和颜色)

第二步定义另一个类实现鼠标监听器和按钮监听器的重写

对于按钮监听器,获取按钮上的文本,如果为空表示为颜色按钮,获取按钮颜色(此时要用到转型的方法),否则为类型按钮,获取其文本。

对于鼠标监听器,依据文本的不同实现图形的绘制。

第三步创建一个新的类以实现储存操作

同时定义一个数组,将每一次的操作都保存到这个数组里。(具体方法为定义一个新类,其中属性为一次点击或操作需要保存的数据,将这个类的对象作为数组来保存数据)

Basic[] basics = new Basic[1000];

注意,绘制图形的时候需要Graphic对象及其相应方法。

第四步在UI类中对按钮和鼠标加上监听。并把UI的画布用等式传给监听器类。

第五步定义一个新类并继承JFrame类

这个类通过重写paint方法以实现对之前保存的数据的再写

注意1,在重写之前(或者重写刚开始时)需要加上

             super.paint(graphics);

语句,这样使得重写的paint并不是完全重写,而是在原有的绘制逻辑和行为上进行新增绘行为。没有这个语句会导致一些外观或行为上的问题。

第六步,将UI类中的界面定义语句,由用JFrame定义改为用新写的JFrame子类定义

注意,保存的数据此时保存在listener对象中,需要在UI类中把这个数组由listener对象传到新子类对应的对象中去。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值