java画图李正文陈启明.docx

上传人:b****6 文档编号:7984908 上传时间:2023-01-27 格式:DOCX 页数:38 大小:216.41KB
下载 相关 举报
java画图李正文陈启明.docx_第1页
第1页 / 共38页
java画图李正文陈启明.docx_第2页
第2页 / 共38页
java画图李正文陈启明.docx_第3页
第3页 / 共38页
java画图李正文陈启明.docx_第4页
第4页 / 共38页
java画图李正文陈启明.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

java画图李正文陈启明.docx

《java画图李正文陈启明.docx》由会员分享,可在线阅读,更多相关《java画图李正文陈启明.docx(38页珍藏版)》请在冰豆网上搜索。

java画图李正文陈启明.docx

java画图李正文陈启明

 

科技学院

《java课程设计》课程设计文档

(2014--2015年度第1学期)

 

项目名称:

画图板软件开发和设计

院系:

信息工程系

班级:

12级实验班

学号:

121909010209121909020104

学生姓名:

李正文陈启明

成绩:

日期:

2014年12月15日

1引言

1.1课程设计选题

《画图板软件开发和设计》

1.2课程设计的目的

巩固和加深以Java语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。

1.3本选题的设计背景

日常生活、学习中我们经常需要画图,简单的画图我们可以手工画图,但往往还是不能满足需求。

因此,借助计算机准确而快速的画图就十分有必要了。

好的画图工具能够很好的完成日常生活中的各种画图工作。

学习了Java语言后设计开发一个画图软件是对Java语言学习的巩固以及提高。

能够在实践中更深的理解面向对象语言,同时提高了解决问题的能力。

2需求分析

2.1功能需求

考虑到画图板的实际需要,画图板要实现打开、保存图片,用于打开本地图片或保存当前图片至本地;选择需要绘制的图形,用于选择需要绘制的图形样式,如直线、矩形、椭圆等;设置背景色、画笔色以及画笔大小,用于设置画板背景颜色、画笔颜色和当前画笔粗细;擦除错误操作;显示帮助信息等。

2.2软件开发运行环境

本软件开发平台:

JavaSE

本软件集成开发环境:

EclipseStandard/SDKVersion:

LunaRelease(4.4.0)

本软件运行环境:

Windowsxp或以上版本

3总体设计

3.1软件结构设计

3.1.1结构设计

菜单栏的设计及功能实现:

菜单栏主要包括文件、设置、编辑(未实现功能,)帮助等常见菜单。

其中文件菜单有新建、打开、保存、另存为、退出等功能;设置菜单含有对画笔颜色、画笔大小等的设置功能;帮助菜单提供画图板的帮助信息。

画图区的设计:

对图片的编辑处理区。

工具栏的设计:

根据实际需要选择不同的工具完成画图操作。

其他功能设计。

3.2软件功能模块及主要类设计

3.2.1功能描述

本软件可以绘制日常生活、学习中的一般图形。

软件主要有菜单栏、工具栏、画图区组成,菜单栏具有新建、打开、保存等常见的功能;工具栏可以选择用户需要的图形样式、设置参数、插入文本等操作;画图区就是简单绘图区域,用户在画图区可自由绘制图形。

右击工具栏可设置工具是否可拖动。

还可以根据不同的需要设置背景色,画笔大小、画笔颜色。

能够在任意点添加文字并设置文字样式和字体。

 

3.2.2总体结构图

图3.2.1画图板总体结构图

3.2.3主要类设计

(1)Paint类

Paint类为主类,定义main方法;

(2)MyPaint类

MyPaint类继承JFrame类,用于实现画图板的总体构架。

包括菜单栏设计、工具栏设计、画图区创建、鼠标事件等等。

画图板的基本功能都靠MyPaint类来实现。

(3)DrawPanel类

DrawPanel来是MyPaint类的内部类,是用来画图的。

(4)Drawings类

Drawings类是画图类,基本图形的单元。

其各个子类用以实现画各种图形包括以下几个子类:

1.Line类:

绘制直线;

2.Rect类:

绘制矩形;

3.fillRect:

绘制实心矩形;

4.Oval类:

绘制椭圆;

5.fillOval类:

绘制实心椭圆;

6.Circle类:

绘制圆;

7.fillCircle类:

绘制实心圆;

8.RoundRect:

绘制圆角矩形;

9.fillRoundRect类:

绘制实心圆角矩形;

10.Pencil类:

自由笔;

11.Rect3D类:

绘制3D矩形;

12.fillRect3D类:

绘制实现3D矩形;

13.Cube类:

绘制立方体;

14.Rubber类:

橡皮类;

15.Word类:

文本类;

4详细设计与实现

4.1主界面

4.1.1主界面功能设计

画图板的主界面分为菜单栏、工具栏、画图区、状态栏四部分。

其中,菜单栏实现了图片的打开、新建、保存等操作;工具栏实现了画笔的各种操作;画图区实现了图片的操作面板;状态栏实现了显示鼠标当前状态。

4.1.2主界面设计

画图板的主界面如图所示,在主类中加载了系统风格,使其界面更为美观;为工具栏和工具栏按钮添加了颜色,使画图板颜色不单调;为画图板得主窗口设置图标,使画图板更有个性。

在实现画图功能的基础上使其外观更为人性化。

主界面(编辑栏没实现)

4.1.3主界面主要代码

设置窗体图标:

Toolkitkit=Toolkit.getDefaultToolkit();//获取Toolkit实例

Imageimage=kit.getImage("Icons/Title.jpg");//获取图片setIconImage(image);//设置窗体图标

加载系统风格:

try{

UIManager.setLookAndFeel(UIManager.

getSystemLookAndFeelClassName());

}//加载系统界面风格

catch(Exceptione){

}

设置鼠标样式:

setCursor(newCursor(Cursor.HAND_CURSOR));//设置画图板鼠标样式

背景色:

setBackground(newColor(0,255,0));

4.2菜单栏

4.2.1菜单栏功能设计

菜单栏包括文件、编辑、设置、帮助四部分。

其中,文件菜单实现了新建、打开、保存、退出功能;编辑菜单实现了撤销和恢复功能;设置菜单实现了画笔颜色、画笔大小和立方体宽度的设置;帮助菜单实现了关于画图板的帮助信息;

4.2.2菜单栏界面设计

1.文件菜单:

图4.2.1文件菜单

 

2.设置菜单:

图4.2.3设置菜单

3.帮助菜单:

图4.2.4帮助菜单

4.打开文件窗口:

图4.2.5打开窗口

图4.2.6撤销操作

5.画笔颜色选择:

图4.2.7画笔颜色选择

6.画笔大小设置:

图4.2.8设置画笔大小

7.立方体宽度设置:

图4.2.8设置立方体宽度

8.“关于画图板”帮助:

图4.2.10关于画图板

11.“关于作者”帮助

图4.2.11关于作者

4.2.3菜单栏主要代码

菜单栏代码较多,详细代码见附录。

4.3工具栏

4.3.1工具栏功能设计

工具栏是一系列快捷操作的按钮,分别是:

新建、打开、保存、自由画笔、直线、空心矩形、实心矩形、空心椭圆、实心椭圆、圆、实心圆、空心圆角矩形、实心圆角矩形、3D矩形、3D矩形、3D长方体、橡皮、设置背景色、画笔颜色、画笔粗细、添加文字,用来实现相应的功能。

另外还为工具栏设置了按钮图片和鼠标右击事件,右击鼠标可以设置工具栏是否可拖动。

4.3.2工具栏界面设计

图4.3.1工具栏界面

4.3.3工具栏主要代码

工具栏按钮图标:

items=newImageIcon[names.length];

//创建各种基本图形的按钮

choices=newJButton[names.length];

buttonPanel=newJToolBar(JToolBar.VERTICAL);

buttonPanel=newJToolBar(JToolBar.HORIZONTAL);

ButtonHandlerhandler=newButtonHandler();

ButtonHandler1handler1=newButtonHandler1();

buttonPanel.setBackground(newColor(0,255,0));//工具栏背景色设置

//导入图形图标,图标存放在项目文件夹下的Icons目录内

for(inti=0;i

items[i]=newImageIcon("Icons/"+names[i]+".gif");

choices[i]=newJButton(items[i]);

choices[i].setToolTipText(tipText[i]);

choices[i].setBackground(newColor(0,255,0));//按钮背景色设置

buttonPanel.add(choices[i]);

}

鼠标右击事件:

//工具栏右击菜单,设置工具栏是否可拖动

voidToolMenu(){

finalJPopupMenuToolMenu;

ToolMenu=newJPopupMenu();

finalJCheckBoxmove=newJCheckBox("工具栏是否可拖动");

move.setBackground(newColor(0,255,0));

ToolMenu.add(move);

buttonPanel.addMouseListener(newMouseAdapter(){

publicvoidmousePressed(MouseEvente){

if(e.getModifiers()==InputEvent.BUTTON3_MASK)

ToolMenu.show(buttonPanel,e.getX(),e.getY());

}

});

move.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

if(move.isSelected()){

buttonPanel.setFloatable(true);

}else{

buttonPanel.setFloatable(false);

}

}

});

}

4.4画图区

4.4.1画图区功能设计

画图区可以绘制各种图形,可以进行擦除操作,还可以根据实际需要添加文本。

4.4.2画图区界面设计

图4.4.1画图界面

4.4.3画图区主要代码

详细代码见附录。

4.5状态栏

4.5.1状态栏功能设计

状态栏是显示鼠标的状态的信息栏,随时反馈鼠标信息。

4.5.2状态栏设计

图4.5.1状态栏显示

4.5.3状态栏代码

部分代码如下,详细代码见附录:

publicvoidmouseReleased(MouseEvente){

statusBar.setText("鼠标松开:

["+e.getX()+","+e.getY()+"]");

if(currentChoice==3||currentChoice==16){

itemList[index].x1=e.getX();

itemList[index].y1=e.getY();

}

itemList[index].x2=e.getX();

itemList[index].y2=e.getY();

repaint();

index++;

createNewItem();

}

5总结

经过几周的程序设计,把java十周的课程又落实到了实际的项目中去,完成了这次画图板的设计,虽然不是很完善,但是还是基本实现了画图的功能,通过查阅资料,和相互合作,解决了大多数的困难。

实现了画图的功能,并且以数组的形式存放,在以图片的形式保存。

总的来说,两个人合作,克服了分歧,统一了思想,最终完成了这次的项目。

对于未来,可能还有遇到比这难很多的项目,但是学会了去解决问题的能力,就会去实现不同的项目。

 

6源代码

importjava.awt.BasicStroke;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics2D;

importjava.io.Serializable;

//画图类,基本图形单元,用到串行化接口,保存时所用

classDrawingsimplementsSerializable{//Serializable:

对象序列化的接口,标识一个类的对象可以被序列化。

intx1,y1,x2,y2;//定义坐标属性

intR,G,B;//定义色彩属性

floatstroke;//定义线条粗细属性

inttype;//定义字体属性

Strings1;

Strings2;//定义字体风格属性

intthickness;//立方体的宽度

voiddraw(Graphics2Dg2d){

}//定义绘图函数

}

//各种基本图形单元的子类,都继承自父类drawings

//直线类

 

//随笔画类

classPencilextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.drawLine(x1,y1,x2,y2);

}

}

//直线

classLineextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));//设置画笔的线宽

g2d.drawLine(x1,y1,x2,y2);//在两点之间画一条线

}

}

//矩形类

classRectextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.drawRect(Math.min(x1,x2),Math.min(y1,y2),

Math.abs(x1-x2),Math.abs(y1-y2));//左边缘,上边缘,右边缘,下边缘,x,y,width,heigth

}

}

//实心矩形类

classfillRectextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));

}

}

//椭圆类

classOvalextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));

}

}

//实心椭圆

classfillOvalextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));

}

}

//圆类

classCircleextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.drawOval(Math.min(x1,x2),Math.min(y1,y2),

Math.max(Math.abs(x1-x2),Math.abs(y1-y2)),

Math.max(Math.abs(x1-x2),Math.abs(y1-y2)));//x,y,width,height.

}

}

//实心圆

classfillCircleextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2),

Math.max(Math.abs(x1-x2),Math.abs(y1-y2)),

Math.max(Math.abs(x1-x2),Math.abs(y1-y2)));

}

}

//圆角矩形类

classRoundRectextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.drawRoundRect(Math.min(x1,x2),Math.min(y1,y2),

Math.abs(x1-x2),Math.abs(y1-y2),50,35);//arcWidth-4个角弧度的水平直径。

arcHeight-4个角弧度的垂直直径。

}

}

//实心圆角矩形类

classfillRoundRectextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.fillRoundRect(Math.min(x1,x2),Math.min(y1,y2),

Math.abs(x1-x2),Math.abs(y1-y2),50,35);

}

}

//3D矩形类

classRect3DextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.draw3DRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),

Math.abs(y1-y2),true);//raised-一个用于确定矩形是凸出平面显示还是凹入平面显示的boolean值。

}

}

//填充的3D矩形类

classfillRect3DextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

g2d.fill3DRect(Math.min(x1,x2),Math.min(y1,y2),

Math.abs(x1-x2),Math.abs(y1-y2),false);

}

}

//立方体类

classCubeextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setStroke(newBasicStroke(stroke));

for(inti=thickness;i>=0;i--){

g2d.fill3DRect(Math.min(x1,x2)+i,Math.min(y1,y2)-i,

Math.abs(x1-x2),Math.abs(y1-y2),true);

}

}

}

//橡皮擦类

classRubberextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(255,255,255));

g2d.setStroke(newBasicStroke(stroke+4));

g2d.drawLine(x1,y1,x2,y2);

}

}

//输入文字类

classWordextendsDrawings{

voiddraw(Graphics2Dg2d){

g2d.setPaint(newColor(R,G,B));

g2d.setFont(newFont(s2,x1,((int)stroke)*18));

if(s1!

=null)

g2d.drawString(s1,x1,y1);

}

}

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

importjavax.swing.*;

importjavax.swing.event.UndoableEditEvent;

importjavax.swing.undo.*;

publicclassPaint{

publicstaticvoidmain(String[]args){

try{

UIManager.setLookAndFeel(UIManager.

getSystemLookAndFeelClassName());

}//加载系统界面风格(这是把外观设置成你所使用的平台

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1