1、 西安科技大学 Java语言课程设计汇报 题目: 画图板应用程序开发 班级: 学号: 姓名: 12 月 目 录 1 设计题目及具体要求………………………………………………………3 2 总体设计……………………………………………………………………6 3 具体设计和实现……………………………………………………………4 4 系统测试……………
2、………………………………………………………11 5 设计小结……………………………………………………………………31 参考文件 1、设计题目及具体要求 1.1 题目需求 1. 设计题目:小画图板开发。 2. 关键分析 本软件重难点为主窗体设计、菜单栏和工具栏设计、事件响应处理、画图基础功效实现。 3. 实现功效 1. 新建一个空白图形文件:用于绘制新图形。 2. 打开或保留一个图形文件,便于对图形文件管理。 3. 绘制部分基础图形组件:直线,矩形,实心矩形,椭圆,实心椭圆,圆,实心圆,圆角
3、矩形,实心圆角矩形等。 4. 用鼠标在绘图板上单击拖动进行随笔花。 5. 橡皮擦:能够将已绘制图形擦掉。 6. 添加文字:能够在绘图区域内添加文字。 7. 选择文字字体:经过一个下拉式选择条,能够选中所需要字体。本程序中包含:宋体,隶书,华文彩云,仿宋-GB2312,华文行楷,Times New Roman,Serif,Monospaced,SonsSerif,Garamond。当然,在下面程序分析中能够看到,因为设置了字体选择数组,使得能够随意添加系统支持任何字体。大大方便和简化了程序设计。 8. 选择文字字体风格:经过两个复选框按钮,能够选择需要字体风格,包含:粗体,斜体,用同时
4、选中二者,只选择其中一个或二者全部不选中3种选择方法。 9. 设置画笔颜色:能够选择目前绘制图形画笔颜色,让图形愈加丰富多彩,生动活泼。 10. 设置画笔粗细:该选项在作用于基础图形组件和文字时,它效果是不一样。看成用于绘制图形组建时,它作用是改变画笔绘制线条粗细;看成用于文字时,它作用是改变文字大小。 4. 功效图 图1-1 画图板应用程序功效结构图 1.2 实现环境及工具介绍 CPU:Intel Core(TM)2 E5300 内存:2G 运行平台:Windows XP 主频:2.60GHz 开发平台:Eclipse
5、 主板:ASUSTeK Computer INC. P5QL-ASUS-SE Eclipse介绍: Eclipse——IBMJava IDE开发环境 IBM-Eclipse介绍: Eclipse 是一个开放源代码、基于 Java 可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于经过插件组件构建开发环境。幸运是,Eclipse 附带了一个标准插件集,包含 Java 开发工具(Java Development Tools,JDT)。 IBM-Eclipse版本历史: Eclipse最初是由IBM企业开发替换商业软件Visual Age for J
6、ava下一代IDE开发环境,11月贡献给开源小区,现在它由非营利软件供给商联盟Eclipse基金会(Eclipse Foundation)管理。 ,Eclipse 3.0选择OSGi服务平台规范为运行时架构。 6月,稳定版3.3公布。6月公布代号为Ganymede3.4版。7月公布代号为GALILEO3.5版。6月公布代号为Helios3.6版。 IBM-Eclips语言拓展: Eclipse是著名跨平台自由集成开发环境(IDE)。最初关键用来Java语言开发,不过现在亦有些人经过插件使其作为其它计算机语言比如C++和Python开发工具。Eclipse本身只是一个框架平台,不过众多插
7、件支持使得Eclipse拥有其它功效相对固定IDE软件极难含有灵活性。很多软件开发商以Eclipse为框架开发自己IDE。 Eclipse 最初由OTI和IBM两家企业IDE产品开发组创建,起始于1999年4月。IBM提供了最初Eclipse代码基础,包含Platform、JDT 和PDE。现在由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大Eclipse联盟,有150多家软件企业参与到Eclipse项目中,其中包含Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开起源码项目,它其实是 Visual Age for Ja
8、va替换品,其界面跟先前Visual Age for Java差不多,但因为其开放源码,任何人全部能够无偿得到,并能够在此基础上开发各自插件,所以越来越受大家关注。近期还有包含Oracle在内很多大企业也纷纷加入了该项目,并宣称Eclipse未来能成为可进行任何语言开发IDE集大成者,使用者只需下载多种语言插件即可。 Eclipse 插件开发环境 即使大多数用户很乐于将 Eclipse 看成 Java IDE 来使用,但 Eclipse 目标不仅限于此。Eclipse 还包含插件开发环境(Plug-in Development Environment,PDE),这个组件关键针对期望扩展
9、 Eclipse 软件开发人员,因为它许可她们构建和 Eclipse 环境无缝集成工具。因为 Eclipse 中每样东西全部是插件,对于给 Eclipse 提供插件,和给用户提供一致和统一集成开发环境而言,全部工具开发人员全部含有相同发挥场所。 基于 Eclipse 应用程序突出例子是 IBM WebSphere Studio Workbench,它组成了 IBM Java 开发工具系列基础。比如,WebSphere Studio Application Developer 添加了对 JSP、servlet、EJB、XML、Web 服务和数据库访问支持。 Eclipse关键组成
10、 Eclipse是一个开放源代码软件开发项目,专注于为高度集成工具开发提供一个全功效、含有商业品质工业平台。它关键由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包含四个部分组成——Eclipse Platform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform则是一个开放可扩展IDE,提供了一个通用开发平台。它提供建造块和结构并运行集成软件开发工具基础。Eclipse Platform许可工具建造者独立开发和她人工具无缝集成工具从而无须分辨一个工具功效在哪里结束,而另一个工具功效
11、在哪里开始。 Eclipse SDK Eclipse SDK(软件开发者包)是Eclipse Platform、JDT和PDE所生产组件合并,它们能够一次下载。这些部分在一起提供了一个含有丰富特征开发环境,许可开发者有效地建造能够无缝集成到Eclipse Platform中工具。Eclipse SDK由Eclipse项目生产工具和来自其它开放源代码第三方软件组合而成。Eclipse项目生产软件以 GPL公布,第三方组件有各自本身许可协议。 2、总体设计 2.1 基础图形按钮 基础图形按钮包含:Pencil(随笔画)、Line(直线)、Rect(矩形)、fRect(实心矩形)、
12、Oval(椭圆)、fOval(实心椭圆)、Circle(圆)、fCircle(实心圆)、RoundRect(圆角矩形)、frrect(实心圆角矩形)、Rubber(橡皮擦)、Word(字)。 基础图形全部继承自同一个父类:drawings。Drawings含有变量(属性): int x1, y1, x2, y2; //用来存放对应图形元素左边 int R, G, B; //用来存放图形色彩信息 float stroke; //用来存放画笔粗细 int type; //用来保留图形类型 string s1; //用来保留
13、输入文字字符串 string s2; //用来保留字体类型字符串 同时,drawings还有方法: Void draw(Graphics2D g2d) {}; draw()方法中用到了java绘图里面Graphics2D类,全部继承drawings类图形子类全部重写此方法。这就是Java中类继承概念。 2.2 基础操作按钮 1. New:新建一个图形文件。 2. Open:打开一个图形文件。 3. Save:保留目前图形文件。 2.3 菜单及其组成 1. File菜单项,包含:New(新建一个图形文件)、Load(打开一个图形文件)、Save(保留一个图形
14、文件)、Exit(退出程序)。 2. Color菜单项:用来设置目前颜色。 3. Stroke菜单项:用来设置目前画笔粗细。 4. Help菜单项:相关程序帮助提醒。 2.4 其它功效组成 1. 选择颜色和设置目前画笔粗细按钮分别为:Color、Stroke。 2. 选择目前字体风格选择框为:BOLD、ITALIC,用以设置目前字体风格。 3. 选择目前字体下来是复选框为:Styles。 2.5 完成程序界面图为: 图2-1 完成程序界面效果图 3、具体设计和实现 3.1 新建一个图形文件 单击工具栏上图标,或选择Fileà New菜单,则清除目前所绘制图像,
15、回到初始画面,图4-1所表示。 3.2 打开已经有文件 单击工具栏上图标,或选择FileàLoad菜单,则清除目前所绘制图像,并弹出打开文件对话框要求选择打开文件,图5-1所表示。 图3-1 选择打开文件对话框 3.3 保留 单击工具栏上图标,或选择FileàSave菜单,则弹出要求保留文件对话框,图5-2所表示。 图3-2 保留文件对话框 3.4 绘制基础图形 基础图形包含: 1. Pencil:随笔画,图标为。 2. Line:直线,图标为。 3. Rect:矩形,图标为。 4. fRect:实心矩形,图标为。 5. Oval:椭圆,图标为。
16、 6. fOval:实心椭圆,图标为。 7. Circle:圆,图标为。 8. Fcircle:实心圆,图标为。 9. RoundRect:圆角矩形,图标为。 10. frRect:实心圆角矩形,图标为。 11. Rubber:橡皮擦,图标为。 画图时,单击工具栏上对应图形图标,然后用鼠标拖动,在绘图区域内进行绘画即可。 3.5 设置画笔大小 单击工具栏上图标,或单击StrokeàSet Stroke菜单,则弹出对应设置目前画笔粗细对话框,图5-3所表示。 图3-3 设置目前画笔粗细对话框 3.6 选择颜色
17、 单击工具栏上图标,或单击ColoràChoose Color菜单,则弹出对应选择目前画图颜色对话框,图5-4所表示。 图3-4 选择颜色对话框 3.7 选择字体风格 在工具栏区域,能够选择对应字体风格,有粗体和斜体两种风格可供选择。 3.8选择字体 在工具栏区域,能够选择字体,本程序中有以下多个字体可供选择:宋体,隶书,华文彩云,仿宋-GB2312,华文行楷,Times New Roman,Serif,Monospaced,SonsSerif,Garamond。 3.9 程序结构说明 本程序主体文件为一个文件:MiniDrawPad.Jav
18、a。其中包含程序段有: 1. MiniDrawPad():结构函数,用以初始化。 2. chooseColor():选择目前绘图颜色程序段。 3. setStroke():设置目前画笔粗细程序段。 4. loadFile():调用图形文件程序段。 5. newFile():新建一个图形文件程序段。 6. saveFile():保留目前所绘制图形程序段。 7. createNewItem():新建一个基础图形单元程序段。 对应内部类有: 1. ButtonHandler:用来处理基础图形单元按钮事件。 2. ButtonHandler1:用来处理New、Open、Save
19、三个操作按钮按钮事件。 3. DrawPanel:用老创建绘图区域子类。 4. MouseA:继承了MouseAdapter,用来完成鼠标对应事件操作,如单击、松开、进入和离开等。 5. MouseB:继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时对应操作。 4、系统测试 4.1 运行结果 1. 主界面框架 主界面类继承自JFrame类,包含结构函数及多种功效定义,关键代码以下 : import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax
20、swing.*; import java.io.*; import java.util.*; public class MiniDrawPad extends JFrame //主类,扩展了JFrame类,用来生成主界面 { private ObjectInputStream input; private ObjectOutputStream output; //定义输入输出流,用来调用和保留图像文件 private JButton choices[]; //按钮数组,存放以下名称功效按钮 private String na
21、mes[]={ "New", "Open", "Save", //这三个是基础操作按钮,包含"新建"、"打开"、"保留" "Pencil", //铅笔画,也就是用鼠标拖动着随意绘图 "Line", //绘制直线 "Rect", //绘制空心矩形 "fRect", //绘制以指定颜色填充实心矩形 "Oval", //绘制空心椭圆 "fOval", //绘制以指定颜色填充实心椭圆
22、 "Circle", //绘制圆形 "fCircle", //绘制以指定颜色填充实心圆形 "RoundRect", //绘制空心圆角矩形 "frRect", //绘制以指定颜色填充实心圆角矩形 "Rubber", //橡皮擦,可用来擦去已经绘制好图案 "Color", //选择颜色按钮,可用来选择需要颜色 "Stroke", //选择线条粗细按钮,输入需要数值能够实现绘图线条粗细改变 "Word" //输入文字按钮
23、能够在绘图板上实现文字输入 }; private String styleNames[]={ " 宋体 " , " 隶书 " , " 华文彩云 " , " 仿宋_GB2312 " , " 华文行楷 " , " 方正舒体 " , " Times New Roman " , " Serif " , " Monospaced " , " SonsSerif " , " Garamond " }; //可供选择字体项 private Icon items[];
24、 private String tipText[]={ //这里是鼠标移动到对应按钮上面上停留时给出提醒说明条 "Draw a new picture", "Open a saved picture", "Save current drawing", "Draw at will", "Draw a straight line", "Draw a
25、rectangle", "Fill a ractangle", "Draw an oval", "Fill an oval", "Draw a circle", "Fill a circle", "Draw a round rectangle", "Fill a round rectangle", "Erase at will
26、", "Choose current drawing color", "Set current drawing stroke", "Write down what u want" }; JToolBar buttonPanel ; //定义按钮面板 private JLabel statusBar; //显示鼠标状态提醒条 private DrawPanel drawingArea; //
27、画图区域 private int width=800,height=550; //定义画图区域初始大小 drawings[] itemList=new drawings[5000]; //用来存放基础图形数组 private int currentChoice=3; //设置默认画图状态为随笔画 int index=0; //目前已经绘制图形数目 private Color color=Color.black; //目前画笔颜色 int R,G,B;
28、 //用来存放目前色彩值 int f1,f2; //用来存放目前字体风格 String style1; //用来存放目前字体 private float stroke=1.0f; //设置画笔粗细,默认值为1.0f JCheckBox bold,italic; //定义字体风格选择框 //bold为粗体,italic为斜体,二者能够同时使用 JComboBox styles; public
29、 MiniDrawPad() //结构函数 { super("Drawing Pad"); JMenuBar bar=new JMenuBar(); //定义菜单条 JMenu fileMenu=new JMenu("File"); fileMenu.setMnemonic('F'); 2. 新建、保留、打开、退出菜单项 代码以下: //新建文件菜单条 JMenuItem newItem=new JMenuItem("New"); newItem.setMnemonic('N'); newItem.addA
30、ctionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { newFile(); //假如被触发,则调用新建文件函数段 } } ); fileMenu.add(newItem); //保留文件菜单项 JMenuItem saveItem=new JMenuItem(
31、"Save"); saveItem.setMnemonic('S'); saveItem.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { saveFile(); //假如被触发,则调用保留文件函数段 } } ); fileMenu.add(sa
32、veItem); //打开文件菜单项 JMenuItem loadItem=new JMenuItem("Load"); loadItem.setMnemonic('L'); loadItem.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { loadFile(); //假如被触发,则调用打开文件函数段
33、 } } ); fileMenu.add(loadItem); fileMenu.addSeparator(); //退出菜单项 JMenuItem exitItem=new JMenuItem("Exit"); exitItem.setMnemonic('X'); exitItem.addActionListener( new ActionListener(){ public void actionPerformed(A
34、ctionEvent e) { System.exit(0); //假如被触发,则退出画图板程序 } } ); fileMenu.add(exitItem); bar.add(fileMenu); 3. 线条宽度、颜色、提醒功效 代码以下: //设置颜色菜单条 JMenu colorMenu=new JMenu("Color"); colorMenu.setMnemonic('C'); //选择颜色菜
35、单项 JMenuItem colorItem=new JMenuItem("Choose Color"); colorItem.setMnemonic('O'); colorItem.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { chooseColor(); //假如被触发,则调用选择颜色函数段
36、 } } ); colorMenu.add(colorItem); bar.add(colorMenu); //设置线条粗细菜单条 JMenu strokeMenu=new JMenu("Stroke"); strokeMenu.setMnemonic('S'); //设置线条粗细菜单项 JMenuItem strokeItem=new JMenuItem("Set Stroke"); strokeItem.setMnemonic('K'); stroke
37、Item.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { setStroke(); } } ); strokeMenu.add(strokeItem); bar.a
38、dd(strokeMenu); //设置提醒菜单条 JMenu helpMenu=new JMenu("Help"); helpMenu.setMnemonic('H'); //设置提醒菜单项 JMenuItem aboutItem=new JMenuItem("About this Drawing Pad!"); aboutItem.setMnemonic('A'); aboutItem.addActionListener( new ActionListener(){
39、 public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "This is a mini drawing pad!\nBy Jian Yongkang ", " 画图板程序说明 ",JOptionPane.INFORMATION_MESSAGE ); } }
40、 ); helpMenu.add(aboutItem); bar.add(helpMenu); items=new ImageIcon[names.length]; 4. 工具栏图形按钮功效实现 创建基础图形按钮、导入图标、加入动作侦听器、字体风格选择、字体选择、画图板等功效实现。 代码以下: //创建多种基础图形按钮 drawingArea=new DrawPanel(); choices=new JButton[names.length]; buttonPanel = new JToolBar
41、 JToolBar.VERTICAL ) ;
buttonPanel = new JToolBar( JToolBar.HORIZONTAL) ;
ButtonHandler handler=new ButtonHandler();
ButtonHandler1 handler1=new ButtonHandler1();
//导入图形图标,这些图标全部存放在和源文件相同目录下面
for(int i=0;i 42、pg");
choices[i]=new JButton("",items[i]);
choices[i].setToolTipText(tipText[i]);
buttonPanel.add(choices[i]);
}
//将动作侦听器加入按钮里面
for(int i=3;i 43、 new ActionListener(){
public void actionPerformed(ActionEvent e)
{
newFile();
}
}
);
choices[1].addActionListener(
new ActionListener(){
public void actionPerformed(Ac 44、tionEvent e)
{
loadFile();
}
}
);
choices[2].addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
saveFile();
45、 }
}
);
choices[choices.length-3].addActionListener(handler1);
choices[choices.length-2].addActionListener(handler1);
choices[choices.length-1].addActionListener(handler1);
//字体风格选择
styles=new JComboBox(styleNames);
styles.setMaximumRowCount(8 46、);
styles.addItemListener(
new ItemListener(){
public void itemStateChanged(ItemEvent e)
{
style1=styleNames[styles.getSelectedIndex()];
}
}
);
//字体选择
bold=new J 47、CheckBox("BOLD");
italic=new JCheckBox("ITALIC");
checkBoxHandler cHandler=new checkBoxHandler();
bold.addItemListener(cHandler);
italic.addItemListener(cHandler);
JPanel wordPanel=new JPanel();
buttonPanel.add(bold);
buttonPanel.add(italic);
buttonPanel.add 48、styles);
styles.setMinimumSize( new Dimension ( 50, 20 ) );
styles.setMaximumSize(new Dimension ( 100, 20 ) );
Container c=getContentPane();
super.setJMenuBar( bar );
c.add(buttonPanel,BorderLayout.NORTH);
c.add(drawingArea,BorderLayout.CENTER);
statusBar=new 49、 JLabel();
c.add(statusBar,BorderLayout.SOUTH);
statusBar.setText(" Welcome To The Little Drawing Pad!!! :)");
createNewItem();
setSize(width,height);
show();
}
//按钮侦听器ButtonHanler类,内部类,用来侦听基础按钮操作
public class ButtonHandler implements ActionListener
{
publ 50、ic void actionPerformed(ActionEvent e)
{
for(int j=3;j






