Java-绘图软件(Windows画板)

文章目录

  • Java画板实现
    • 任务分析
    • 分析与设计
    • 程序框架
    • 调试与测试
    • 总结
  • GitHub链接

Java画板实现

任务分析

功能需求
. 绘制基本图形(曲线,直线,矩形,椭圆,圆,圆角矩形,填充图形,文字)
. 图形文件操作(保存,新建,打开)
. 图形操作(填充,撤回,擦除)
. 图像编辑(拉伸,扭曲,旋转,翻转,放大,缩小)
. 颜色设定(自定义设定)
.设置笔画粗细
.设置字体
技术路线
开发工具及环境:jdk1.12 intelliJ IDEA StarUML
用到的主要技术:
Swing框架,
事件监听机制(ActionEvent,MouseEvent,ItemEvent)
图形界面设计:AWT+Swing
Graphics2D绘图(多态)

分析与设计

用况图

Java-绘图软件(Windows画板)
详细设计
Draw
主动类,用来程序的执行,main方法中new了一个JFrame对象。

DrawArea
画板类,用来绘制图形区域,支持重绘,注册鼠标事件监听器,实例化两个接口,实现绘图。
属性:

方法:

Java-绘图软件(Windows画板)

方法:

Java-绘图软件(Windows画板)

shape
绘制图形的父类,实例化Serializable(序列化)接口,其属性保存绘图必要的坐标,色彩,粗细,字体等信息。有一个绘图方法,由子类重写该方法,调用时实现多态。

Line,Rect,fillrect,Oval,fillOval,Circle,fillCircle,RoundRect,fillRounRect,pencil,Eraser,word
具体图形类,继承自shape类,重写方法

Java-绘图软件(Windows画板)
(2)图形化设计步骤
创建顶层容器
程序的初始显现窗口,窗口中放入其它菜单、工具栏、文本框、按钮等组件
其它所有的组件(控件)都是直接或间接显示在顶层容器中的。
在java中顶层容器有三种,分别是JFrame(框架窗口,即通常的窗口)、JDialog(对话框)、JApplet(用于设计嵌入在网页中的java小程序)。
本例中顶层容器是DrawPad(继承自JFrame):
Java-绘图软件(Windows画板)
将组件加入容器
java中创建组件后,将组件放入相应的容器,才能在顶层容器,如窗口中显示出组件。
本例中将工具栏button_panel(JToolBar),画板drawArea(DrawArea),坐标标签Startbar(JLabel)加入到顶层容器DrawPad中
还将许多小型控件加入到中型容器工具栏中
Java-绘图软件(Windows画板)
处理组件所产生的事件
用户执行选择菜单、单击按钮等操作时,就要执行相应的命令,进行相关的程序处理,需要设置组件的事件。
本例中工具栏主要发生的是ActionEvent和ItemEvent事件,用户通过点击相应的按钮,触发该事件,事件处理方式是:使用接口在类内重写actionPerformed()方法和itemStateChanged()方法
Java-绘图软件(Windows画板)
(3)特殊说明的方法

AWT 和 Swing 中组件的绘制方式不同,绘制方法的实现也有区别。
AWT 中组件重绘时先调用 update(Graphics g) 清除以前绘制的,再调用 paint() 方法里进行绘制,所以在 AWT 组件里重绘时,只要简单的覆写 paint() 方法就可以了。
而在Swing 中,组件绘制 paint() 方法会依次调用 paintComponent(),paintBorder(),paintChildren() 三个方法。paintComponent() 绘制组件本身,paintBorder() 绘制组件的边框,paintChildren() 绘制组件的子组件, Swing 编程时,如果继承 JComponent 或者其子类需要重绘的话,只要覆写 paintComponent() 而不是 paint(),方法 paintBorder(),paintChildren()一般默认即可

将画笔传到每个图形类,用它们自己重写的draw()方法绘制图形,实现了多态绘图。

画板的图像转换后可以进行传输存储了。

调试与测试

(1)难点
不同图形绘制之间的共性抽象,以及绘图对象的绘图过程,及存储问题。
在设计之初,不是很清楚计算机是如何作图的,经过资料的查阅,发现简单Graphics2D绘图机制,通过多个坐标点,用Graphics2D对象的不同方法绘图。于是抽象出一个共有的shape类,其子类重写绘图方法。在同一个画板上多个图形存储,是在一个图形数组中,每次有新的变化后,进行重绘,呈现不同样式。
画板图像的存储
当绘制完成时,如何将图片保存起来,重新绘图时想把上次绘制好的图像加载成底图。
为实现该功能,我用BufferImage 存储画板图像。加载时将读入的图片绘制在索引号为0的图形数组中重绘。
(2)主要功能运行展示
绘制基本图形

Java-绘图软件(Windows画板)
Java-绘图软件(Windows画板)
Java-绘图软件(Windows画板)
设置粗细
Java-绘图软件(Windows画板)

总结

本次面向对象程序设计过程,其分为四部分,OOA面向对象分析,OOD面向对象设计,面向对象编程,面向对象测试。
面向对象的基本原则有
(1)抽象:面向对象分析阶段,先定义类的属性和操作,而与实现有关的的因素在设计阶段再考虑
(2)分类:把具有相同属性和相同操作的对象划分为一类,用类作为这些对象的抽象描述
(3)封装:把事物的性质与行为结合,信息隐藏,设置属性公开性。
(4)消息通信:不允许在对象之外直接访问它的内部属性,如set,get方法。
(5)多态性:一般类和特殊类可以有相同格式的属性或操作,但这些属性或操作具有不同的含义,这样的好处是针对同一消息,不同对象可对其进行响应,但体现出来的行为不同,
(6)行为分析:通过状态图可以分析对象的状态变迁情况,关系机制提供了用关联,继承和聚合等组织类的方法。
(7)复杂性控制:引入包的概念,由于我的系统比较简单,只有一个包。
画图软件的实现充分使用了面向对象的方法,设计之初,先做需求分析,再做类图抽象(定义类的属性与操作,分析类之间的关系),使用Swing基本框架设计(由于本例只有一个视图,数据存储不频繁,存储在一个图形数组中,未使用MVC模式,以及其他23种设计模式中,未找到适合的设计模式),利用事件监听机制进行消息通信。利用Graphics2D绘图(多态)。进行文件读写存储。实现其他预留功能。

GitHub链接

画板

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91338 人正在系统学习中

来源:Mr.Ma.01

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年6月22日
下一篇 2019年6月22日

相关推荐