




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华南师范大学本科学生实验报告姓名邱海森 学号 20082100079院系 计算机学院 班级 08级网工7班实验时间 2010年 6 月 1 日实验名称 java:简单绘图程序指导老师及职称: 陈俊侠华南师范大学教务处编印 Java实验 简单的绘图程序一 实验目的1. 学会Netbeans的使用,能进行Netbeans的基本操作,能使用Netbeans构造一个图形界面框架2. 通过实验熟悉swing图形用户界面程序设计3. 熟悉java中的事件处理模型,每个事件动作代表的意义4. 进一步提高编程能力,学会独立思考,学会上网查找资料解决问题。二 实验要求1. 以课本上随手画例程为蓝本,设计一个程序,该程序能够绘制基本的图形(包括圆形、矩形、直线等);要求有一个简单易操作的用户界面(包括菜单、按钮等组件)。2. 编写的程序要求能够实现保存和读取的功能三 实验步骤1. 使用Netbeans设计程序的用户界面(1) 新建一个Frame窗体,作为容器(2) 向Frame窗体中添加基本组件,包括一个JMenuBar(菜单栏),向菜单栏中添加两个JMenu(菜单)(jMenu1、jMenu2),在jMenu1中添加四个jMenuItem(新建、打开、保存、退出),在jMenu2中添加四个jMenuItem(圆形、矩形、三角形、直线)。效果如下: (3) 在Frame窗体上添加JTextArea文本区域,用来在上面绘制图形(4) 添加四个单选按钮,用于选择图形,把四个按选按钮放进一个工具栏中,在同一个按钮组中,实现互斥。效果如下: 至此,图形界面已经基本设计完毕2. 实现图形的绘制(1)鼠标拖动绘制图形:添加鼠标按下事件,添加鼠标拖动事件,向其中填写正确的能执行的代码。遇到的问题:可以实现鼠标拖动绘制图形,但是在鼠标拖动的过程中,却绘制出了多个图形。如图所示: 解决问题的方法:问题出在“鼠标拖动消息函数中”;我们在画图形时,应该先把“刚才”绘制的图形擦出掉。在绘制图形的过程中通过改变画笔的颜色实现多个图形的消除。首先,在鼠标拖动事件中,把画笔的颜色设置成背景颜色(即白色),拖动鼠标时,绘制图形使用的是背景颜色,在原图形位置上重新画。这样我们是看不到的,可以说是擦除了。然后把画笔设置成前景色,绘制一次图形。如:画直线 Graphics g=jTextArea1.getGraphics(); /画笔 g.setColor(jTextArea1.getBackground(); / 画笔颜色设置成组件背景颜色 g.drawLine(pStart.x, pStart.y, pEnd.x, pEnd.y);/ 在直线起点和终点之间画、/直线,用背景色在原直线位置上重复画直线就是擦除直线 g.setColor(jTextArea1.getForeground();/设置画笔颜色为前景色 g.drawLine(pStart.x, pStart.y, evt.getX(),evt.getY();/在直线的起点和光标的/当前拖动位置点之间画一条直线 pEnd=evt.getPoint();/把直线的终点更新为鼠标当前拖动位置点。以便下一/次画直线前擦除 程序基本上已经可以实现了简单的绘图功能。但是仍然有一些问题。问题1:如果绘制的图形出现重叠,重叠的那部分会有模糊现象,会被“擦除”。如图:原因分析:所绘制图形的有关信息没有保存起来,没有实现“交叉擦除现象”出现是重新绘制已画图形的功能。解决方法:把已经绘制的图形的有关信息保存起来,当出现“交叉擦除现象”时重新绘制已经绘制好的图形。我们引入几个类1. 抽象类:类名:Figure抽象成员函数:void DrawFigure (Graphics g) 2直线类 类名 Line 父类:Figure 成员变量1:Point pS 成员变量2:Point pE成员函数 1:成员变量的初始化构造函数成员函数 2: 对父类中DrawFigure抽象函数的实现3. 矩形类 类名:Rect父类:Figure 成员变量1:Point pS 成员变量2:Point pE成员函数 1:成员变量的初始化构造函数成员函数 2: 对父类中DrawFigure抽象函数的实现4. 椭圆类 类名:Oval 父类:Figure 成员变量1:Point pS 成员变量2:Point pE成员函数 1:成员变量的初始化构造函数成员函数 2: 对父类中DrawFigure抽象函数的实现我们在类DrawFrame中引入抽象类Figure,当一个图形绘制完成(“鼠标弹起时”),就用图形的信息生成一个抽象类的具体变量,并把这个变量的值添加到一个DrawFrame类的成员数组链表变量中去;然后在jTextArea1组件的“鼠标拖动”消息函数中,在绘制当前图形的同时,如果这个数组链表中有元素,就重新绘制这些元素.问题2:窗口最大化与最小化过程中图形会消失不见了,但是继续绘制图形时,原来的图形又会恢复原状。绘制的图形临时消失了。解决办法:重写DrawFrame类继承下来的paint函数。这个函数是由操作系统自动调用的。当窗口的界面最大化和最小化恢复过来的时候,操作系统会自动调用这个特殊的paint成员函数,paint成员函数的作用是“重新绘制软件运行结果的窗口界面”。重写这个函数,当它在完成软件窗口界面的绘制工作时,接着再把用户已经绘制的图形也再绘制一次”。重写paint函数代码: public void paint(Graphics arg0) super.paint(arg0); Graphics g=this.jTextArea1.getGraphics(); if(arrList.isEmpty()!=true) Figure f; for(int i=0;iarrList.size();i+) f=(Figure)arrList.get(i); f.drawFigure(g); 效果如下: 3.实现软件的各项功能 (1)保存功能: 单击文件菜单下保存选项,弹出保存对话框,输入文件名,选择保存路径,单击确定保存。 本保存功能是保存为JPG格式文件。 (2)打开功能: 单击文件菜单下打开选项,弹出文件选择对话框,找到需要打开的文件,单击确定打开。 (3)清屏功能: 单击一下,屏幕上所绘图形全部清除掉。 实现方法:清楚数组链表ArryList中的所有图形数据。 实现代码: if(arrList.size()!=0) /判断是否为空 arrList.clear(); /不为空则清空 Graphics g=jTextArea1.getGraphics(); jTextArea1.paint(g); /刷新绘图区域,清楚已绘制的所有图形 (4)撤销功能 单击撤销选项,可以清除上一步绘制的图形、即退一步 实现方法:清除数组链表ArryList中的最后一个图形数据。 实现代码: if(arrList.size()!=0) /判断是否为空 arrList.remove(arrList.size()-1); /不为空则清除最后一个元素 Graphics g=jTextArea1.getGraphics(); jTextArea1.paint(g); /刷新绘图区域,清除最后一个元素 四 实验小结 本次实验是设计一个绘图的小软件,要有良好的图形界面,容易操作。利用Neatbeans很容易就设计好了图形界面,主要的是实现绘图程序的一些功能。在实验过程中,遇到了不少的问题,但是通过查找资料、网上搜索,基本都实现了要求的功能。因为时间的关系,这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年产科试题选择题及答案
- 2025年安全员c2考试试题及答案
- 安全教育培训内容试题及答案解析
- 护理敏感性指标题库及答案解析
- 口腔诊所安全生产培训试题及答案解析
- 中专护理期末题库及答案解析
- 安全培训师现场效果课件
- 汽车客运从业资格证考试及答案解析
- 石场安全测试题及答案解析
- 安全培训师张伟课件
- 教科版科学四年级上册第一单元《声音》测试卷含答案(典型题)
- 《名著阅读 艾青诗选》核心素养课件1(第2课时)
- 人工智能在船舶工程中的应用展望
- 高中化学教师培训课件
- 锲而不舍成功从不言败主题班会课件
- 高血压员工免责协议范本
- 四年级上册面积单位换算题100道
- 公司商业模式的人工智能技术
- 初中科学 浙教版初中科学教材分析
- 六甲基二硅氧烷
- 2022年湖南高考语文真题及答案
评论
0/150
提交评论