在校大学生的一份辛苦劳动成果写了一个小画板程序。

任务书... 1

1.1设计内容... 1

1.2设计任务及具体要求... 1

1.3软件开发运行环境.. 1

2  本组课题... 1

2.1课题... 1

2.2本人任务... 2

3     程序功能简介... 2

1.画板具体功能.. 2

2.功能分析:... 2

4     主体内容... 2

4.1设计分析... 2

4.2程序架构图... 3

4.2.1系统结构分析图... 3

4.2.2程序结构流程图... 4

4.2.3结构流程图... 5

4.3模块功能与说明... 6

4.4源程序... 10

4.4.1Gui类... 10

4.4.2DrawListener类... 13

4.4.3接口图形类... 18

4.5操作方法... 24

4.6实验结果... 25

4.7设计体会... 26

1  设计任务书

1.1设计内容

学习了《Java面向对象编程》的课程,为了更进一步的提高我们对Java的深入学习,进行了课程设计,我所选择课程设计是利用Java的GUI实现画图应用程度。其目的是通过本课程设计使我们能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。

运用JAVA语言,实现界面画板,进行简单图形绘制。

1.2设计任务及具体要求

主要利用java语言设计开发一个小型的画图应用程序,至少具有如下功能:可以进行绘画,有颜色的选择,可以绘制直线、曲线、椭圆、矩形,操作界面要符合用户的一般习惯。

1.3软件开发运行环境

本软件开发平台:JAVA

本软件开发环境:IntelliJ IDEA Community Edition 2018.1.4 x64

本软件运行平台:Windows 10

2  本组课题

2.1课题

JAVA绘图板课程设计。

2.2本人任务

1.编写画板界面。

2.添加组件监听、鼠标监听功能。

3.编写图形类的接口。

4.编写各种图形类并实现图形的重绘。

3   程序功能简介

1.画板具体功能

1)利用Java设计一个画图应用程序;

2)可绘制直线、曲线、椭圆、矩形;

3)可改变线条颜色;

2.功能分析:

用户可以在界面上通过点击各个不同的按钮,选择实现绘制的是哪种图形和颜色,也可以清除画板,程序将自动把所绘制的图形类放在一个集合中,最大化和最小化后遍历该集合,图形实现重绘。

画板画笔分为两种,一种是Graphics,一种是Graphics 2D。可以用来画基本图形还有喷桶、橡皮擦效果。

4  主体内容

4.1设计分析

1.绘图工具已经广为使用,利用JAVA语言编写的画板可以满足基本的图形要求,为了实现绘制矩形、圆形、椭圆、多边形、直线、曲线铅笔等基本图形,在此程序中定义上述几种图形类,实现编写的一个重绘接口。

2.在用户界面GUI类中,继承了JFrame类,添加各种按钮、两个面板,分别用来画图和存放按钮组件,界面采用流式布局,为组件添加编写好的事件监听机制。

3.在事件监听DrawListener类中实现了MouseListener、MouseMotionListener、ActionListener监听接口,并重写其绘图方法。

4.在事件监听类中,定义一个字符串str用来储存按钮按下时上面的内容,如果无文字,则判断为颜色按钮,把画笔颜色color设置为按钮颜色;有文字的话根据按钮文字的不同,去调用不同的图形类方法,并在绘制图形后保存在集合中。

5.在界面GUI类中调用DrawListener类,新建draw引用,为每个按钮添加该事件引用并调用ArrayList集合类,遍历所绘制的图形类,进行重绘。

4.2程序架构图

4.2.1系统结构分析图

画图区                            画笔颜色

笔刷

工具栏               设置           橡皮檫

清除面板

形状选择

矩形      实矩形   椭圆       实椭圆       直线    曲线     多边形

4.2.2程序结构流程图

NetJavaShape接口

图形类            事件监听类                 其它类

主界面类

4.2.3结构流程图

开始

Gui类

点击按钮

DrawListener类               NetJavaShape接口

判断

按钮               颜色类

                         图形类

画图                        结束

4.3模块功能与说明

1.绘图主界面模块

1主类(GUI)用来生成主界面。

2完成画图的框架。

3主界面由画图区、工具栏组成,布局格式采用BorderLayout布局。

4界面截图

2.绘图类模块

1在程序中用到了JAVA的封装、多态、继承特性,定义了NetJavaShape接口,里面写了redraw()抽象方法。

2分别构造不同的图形类:直线类(reline)、实矩形类(refilljuxing)、曲线类(requxian)、射线类(reshexian)、矩形类(rejuxing)、折线类(rezhexian)、椭圆类(retuoyuan)、实椭圆类(refilltuoyuan)。

3每个图形类都实现NetJavaShape接口中的redraw()方法,每个方法中根据形状选择不同的绘制方法函数。

4每个类可以在事件监听类中新建不同的对象引用,根据按钮选择不同可以调用不同的图形类画法。

5部分代码

import java.awt.*;                //定义一个接口,里面用抽象方法让图形类实现该接口

public interface NetJavaShape{

public abstract void redraw();

}

  1. 鼠标及组件的事件监听模块

1 DrawListener实现ActionListener、MouseListenerMouseMotionListener接口。

2定义List<NetJavaShape> getShapeArr()、setG(Graphics g)、setNowColor(JButton nowColor)方法用来获取图形类集合、画笔、当前按钮颜色。

3在actionPerformed(ActionEvent e)方法中用来判断按钮按下时要执行哪种命令。mouseDragged(MouseEvent e)方法中用来执行射线、曲线、橡皮檫、笔刷操作。mousePressed(MouseEvent e)、mouseReleased(MouseEvent e)方法中记录当前鼠标点击和释放的位置坐标。mouseReleased(MouseEvent e)中执行矩形、椭圆、实椭圆、折线、直线、实矩形、喷桶、多边形、擦除面板操作。

4 mouseClicked(MouseEvent e)方法中执行多边形连接操作。

}

else if ("擦除面板".equals(str)){

reclear=new clear(g);

reclear.redraw();

shapeArr.add(reclear);

}

}

@Override

public void mouseClicked(MouseEvent e) {

if(str.equals("多边形")&&flag){                            //鼠标点击时绘制连接多边形

g.setColor(color);

x2=e.getX();                              //获取新的点的坐标

y2=e.getY();

if(e.getClickCount()==2){                  //记录点击次数,点击第二次后开始直线连接

g.drawLine(startx1,starty1,startx2,starty2);

flag=false;

}

g.drawLine(startx2,starty2,x2, y2);

startx2=x2;   //存下上个点的坐标

starty2=y2;

}

}

@Override

public void mouseMoved(MouseEvent e) {

}

}

}

}

4.5操作方法

本软件由IntelliJ IDEA Community Edition 2018.1.4 x64开发,运行后直接进入界面。

1用户打开软件,点击工具栏界面上不同的按钮,可以画出不同的图形。    2系统默认画笔颜色是黑色,用户也可以点击颜色按钮进行不同颜色的图形绘制。                                                                             3当最大化和最小化时,绘制的图形不会改变,将自动进行图形重绘,也能够用笔刷和橡皮檫工具,实现图形美化。

4.6实验结果

基本实现图形绘制、颜色选择、橡皮檫、笔刷、喷桶功能,具体运行结果如下。

4.7设计体会

当把程序写好并进行调试时,并不是一帆风顺的,在程序编译过程中遇到了许许多多的大大小小的错误,经过一次又一次的改正错误最终完成了程序设计

1画图应用程序的Java源代码全部正确能够通过编译并正常运行。

2画图程序要求功能:画直线、曲线、矩形、椭圆、选择颜色等功能完全实现。

3通过Java编程完全实现了课程设计任务书的全部功能。学好一门语言,需要不断反复的练习,面向对象的设计模式,充分运用类与对象的关系,JAVA没有多继承,所以在画板软件中定义了一个接口,让不同的绘图类实现该接口,重写不同的方法。图形类中定义了面板、按钮组件,在事件监听类中,根据不同按钮,调用生成不同图形对象。在这里,为了实现重新绘制,需要图形对象放在集合中,然后在主类中遍历。
通过这次课程设计,提高了我对封装、继承、多态、接口、集合的认识,对事件处理也了解,知识体系进一步扩展,掌握的更加牢固紧密。

源码:310508863

课程设计-毕业设计-JAVA画板课程设计---总之岁月漫长,然而值得等待。相关推荐

  1. 小白学JAVA,与你们感同身受,JAVA---day6:抽象类接口的理解。鲁迅的一句话:总之岁月漫长,然而值得等待。

    抽象类接口的理解 鲁迅的一句话:总之岁月漫长,然而值得等待. /* 抽象类中的面试题: 1.一个抽象类中可不可以没有抽象方法:可以,这样做的目的只有一个,就是不让其他类创建本类对象交给子类完成. 2. ...

  2. 小白学JAVA,与你们感同身受,JAVA---day5:关于多态的理解和分析。鲁迅的一句话:总之岁月漫长,然而值得等待。

    鲁迅的一句话:总之岁月漫长,然而值得等待. 至于是不是他说的,就看大家的了. /* 多态:事物存在的多种形态. 多态的前提: 1.要有继承关系. 2.要有方法的重写. 3.要有父类引用指向子类对象. ...

  3. 计算机毕业设计Java购物网站设计(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java购物网站设计(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java购物网站设计(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...

  4. 计算机毕业设计Java婚纱摄影网设计(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java婚纱摄影网设计(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java婚纱摄影网设计(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 开 ...

  5. 【附源码】计算机毕业设计java众筹平台设计与实现

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  6. 【附源码】计算机毕业设计java中小学图书馆管理设计与实现

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  7. python什么时候用类设计_Python 类的设计与 Java 类的设计有何区别?

    读前声明:本文主要参考了Real Python中的内容,提炼了一些主要的内容,如果英文还不错的想详细了解的话建议直接进入该网站阅读. 提到类的设计,我们不得不提及面向对象(OOP),它是一种编程思想, ...

  8. 电影院网站设计毕业设计,电影院网站的设计与实现,电影院售票系统源码毕设作品参考

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的电影院购票选座系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息,设 ...

  9. 电脑模拟写字板应用设计(Java+Swing+Eclipse)

    目 录 摘要-I Abstract-II 目录-III 1 引言 -1 1.1 选题依据 - 1 1.2 国内外发展现状- 2 1.2 写字板信息检索- 2 1.2.2 写字板信息提取- 3 1.2. ...

最新文章

  1. 5 款非常好用的开源 Docker 工具,get一波~
  2. 如何搭建VUE开发环境
  3. 结对项目之需求分析与原型模型设计
  4. hdu2065(指数型母函数+快速幂)
  5. 嵌入式Linux中的根文件系统
  6. Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法
  7. Redis的过期键删除策略和内存淘汰机制
  8. Keil5配置GCC编译器编译STM32工程
  9. js获取地址栏url以及获取url参数
  10. android怎么做版本检测,android 实现检测版本,下载apk更新(附源码)
  11. python基础词云制作——中国地图
  12. HTTP服务端JSON服务端
  13. EHub_tx1_tx2_E100 Cartographer 完美部署安装
  14. 【图像隐写】基于matlab LSB数字水印嵌入提取【含Matlab源码 2412期】
  15. 盘点国内EDA软件公司
  16. [P4]p4 integrate/resolve/copy
  17. Dreamweaver CS5网页制作教程
  18. [EJB:011008]Unable to bind EJB Home Interface to the JNDI name: BusinessDelegateBean.
  19. 16种凶猛的猫科动物渲染
  20. 周杰伦的2000w个故事

热门文章

  1. c语言朋友,[原创]写给初学 c语言的朋友
  2. 泛型类有什么作用_3 分钟带你彻底搞懂 Java 泛型背后的秘密
  3. python逆序数的程序_计算逆序数(归并法)程序问题 (Python)
  4. 【Pytorch神经网络理论篇】 18 循环神经网络结构:LSTM结构+双向RNN结构
  5. mysql数据库恢复策略_MySQL 备份和恢复策略(一)
  6. 三、PHP基础——HTTP协议 文件编程
  7. python网络爬虫系列(四)——requests模块
  8. LeetCode 2055. 蜡烛之间的盘子(前缀和)
  9. MapReduce 编程实践:统计对象中的某些属性
  10. LeetCode 1668. 最大重复子字符串