java画图李正文陈启明Word文档格式.docx
《java画图李正文陈启明Word文档格式.docx》由会员分享,可在线阅读,更多相关《java画图李正文陈启明Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
显示帮助信息等。
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<
choices.length;
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{
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.drawLine(x1,y1,x2,y2);
//直线
classLineextendsDrawings{
//设置画笔的线宽
//在两点之间画一条线
//矩形类
classRectextendsDrawings{
g2d.drawRect(Math.min(x1,x2),Math.min(y1,y2),
Math.abs(x1-x2),Math.abs(y1-y2));
//左边缘,上边缘,右边缘,下边缘,x,y,width,heigth
//实心矩形类
classfillRectextendsDrawings{
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{
g2d.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));
//实心椭圆
classfillOvalextendsDrawings{
g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));
//圆类
classCircleextendsDrawings{
voiddraw(Graphics2Dg2d){
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{
g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2),
//圆角矩形类
classRoundRectextendsDrawings{
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{
g2d.fillRoundRect(Math.min(x1,x2),Math.min(y1,y2),
//3D矩形类
classRect3DextendsDrawings{
g2d.draw3DRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),
Math.abs(y1-y2),true);
//raised-一个用于确定矩形是凸出平面显示还是凹入平面显示的boolean值。
//填充的3D矩形类
classfillRect3DextendsDrawings{
g2d.fill3DRect(Math.min(x1,x2),Math.min(y1,y2),
Math.abs(x1-x2),Math.abs(y1-y2),false);
//立方体类
classCubeextendsDrawings{
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{
g2d.setPaint(newColor(255,255,255));
g2d.setStroke(newBasicStroke(stroke+4));
//输入文字类
classWordextendsDrawings{
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());
}//加载系统界面风格(这是把外观设置成你所使用的平台