Java画图软件设计报告
java课程设计报告++画笔程序

目录一、前言 (2)二、功能简介 (3)三、概要设计 (4)四、详细设计 (5)五、测试数据及运行结果 (7)六、源程序 (9)七、总结 (19)八、参考文献 (20)一、前言Java不依赖平台的特点使它受到广泛的关注,Java已成为网络时代最重要的语言之一。
目前,Java语言不仅是一门被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言。
因为很多新的技术领域都涉及到Java语言,国内外许多大学已将Java语言列入本科教学计划,而IT行业对Java人才的需求也在不断的增长,因此,掌握Java已经成为共识。
Java是一门说简单也不简单,说难也不难的课程。
所以,我们在学习的过程中要根据自己的具体情况,合理安排编程训练时间,相信编程能力会在不知不觉中得到提高。
二、功能简介1)设计一个画图程序,能够实现画笔、画直线、画圆形、画矩形的功能,并且在绘图过程中能够修改该画笔的大小以及颜色。
该画图程序还需具有橡皮擦功能以及清空整个画面的功能。
2)此程序要实现的功能如下:1、这个画图程序,最基本的功能是,作为一个画笔,能利用它实现在屏幕上任意绘画、书写的功能;2、利用这个画图程序,通过选择画直线、画圆形、画矩形等功能选项并且在屏幕上拖动鼠标操作能实现画出相应图形的功能;3、这个画图程序,还需具备橡皮擦的功能,利用这个橡皮擦能够擦除屏幕上的图案,并且此橡皮擦也应该能够改变大小;4、这个画图程序,还应该做到能够改变画笔颜色的功能;5、这个画图程序,还应该具备能够清除整个屏幕已绘制图画的功能。
三、概要设计1、此程序为实现这些功能模块,必须首先定义一个工具面板,将这些画笔、画直线、画圆形、画矩形、画笔颜色、画笔大小、橡皮等功能组件放入这个工具面板中。
2、此程序为实现利用鼠标做画笔的功能,必会产生鼠标事件MouseEvent。
因此,为实现鼠标画图的功能,必须用到鼠标触发事件,故在此程序中,必须实现“委托事件模型”,用到事件源、事件对象以及监听者对象。
南邮Java实验报告1-综合图形界面程序设计

南邮Java实验报告1-综合图形界面程序设计英文回答:Firstly, I would like to express my sincere gratitudeto my instructor for providing me with the opportunity to work on this Java programming project, which focuses on the design of a comprehensive graphical user interface (GUI). Throughout this project, I have gained valuable experiencein developing a user-friendly and visually appealing application that meets the specified requirements.To begin with, I started by gathering the necessary requirements and understanding the problem statement. Ithen proceeded to design the GUI layout and create the corresponding Java classes and methods. I utilized various Java Swing components, such as buttons, text fields, labels, and panels, to construct a user-friendly interface. Additionally, I implemented event handling mechanisms to respond to user interactions and perform appropriateactions.During the development process, I encountered several challenges. One of the challenges was ensuring that the GUI was responsive and user-friendly. I addressed this by carefully designing the layout and implementing efficient event handling mechanisms. Another challenge was handling complex user interactions and data validation. I overcame this by using appropriate data structures and algorithms to validate user input and perform the required operations.To further enhance the user experience, I incorporated custom graphics and animations. I created custom icons and images to enhance the visual appeal of the application. I also implemented animations to provide visual feedback to users. By incorporating these elements, I aimed to create an engaging and immersive experience for the users.In addition to the technical aspects of the project, I also focused on adhering to coding conventions and best practices. I used proper naming conventions, indentation, and commenting throughout my code. This ensured the codewas readable, maintainable, and extensible.Overall, working on this Java GUI programming project has been a rewarding experience. I have learned a great deal about GUI design, event handling, and the implementation of custom graphics and animations. I am confident that the knowledge and skills I have acquired through this project will be invaluable in my future endeavors as a software developer.中文回答:首先,我谨向我的导师在这次Java编程项目中提供给我的机会表示由衷的感谢。
绘图JAVA程序报告(含程序)

本次编程工具为 UltraEdit。
3 系统流程
开始
曲线 按钮
直线 按钮
画圆 按钮
矩形 按钮
粗线 按钮
填充 颜色
清除
画笔 粗细
f=1
f=2
f=3
f=4
f=5
填充
Y
N
fill=true
fill=false
size 改变
改变颜色
Y
N
输入颜 色
f=1
f=2
f=3
通过 JCheckBox 创建一个按钮,利用按钮监听器决定是否要描绘填 充图形,如果是则将实现赋值 fill=true,否则 fill=false,然后通过 布尔值判断在描绘图形时是 draw 还是 fill,如果布尔值是 ture 时则实 现了图形的填充。 2.2.4 画笔的粗细及画笔的颜色变更
画笔的粗细主要是通过不断地重画填充圆来实现,通过鼠标的拖拽 不断地在画板上进行重画;而粗细则由创建的 JSlider 来调节圆的半径, 如果圆的半径越大则所绘出的曲线越粗,反则越细;画笔的颜色变更主 要通过创建的 JButton 按钮,利用按钮监听器,当按下了按钮,则实现 c=JColorChooser.showDialog(right,"choose",c)语句,从而把初始的 画笔颜色(黑色)改变。 2.2.5 实现鼠标单击和鼠标拖拽进行绘图
在实现绘画的功能,主要通过创建 ButtonGroup 从而把所有的 JRadioButton 都添加进去,从而达到在描绘图形时多选一的选择功能; 利用按钮监听器,利用 Object source=event.getSource()语句当 source==op1 时进行曲线绘画,在实现曲线绘画的功能时,主要利用了 鼠标的点击和鼠标的拖拽,通过鼠标的点击来扑捉第一个坐标点,然后 利用鼠标的拖拽来不断变换第一个点的坐标(利用 sx=x 和 sy=y 语句), 从而将所有点都连接起来,最终实现了在画板上描绘曲线的功能;当 source==op2 时进行直线绘画,在实现直线绘画的功能时,主要利用了 鼠标的点击,鼠标的释放和鼠标的拖拽,通过鼠标的点击来扑捉直线的 第一个坐标点,然后利用鼠标的拖拽选择直线的另一个点,最终通过鼠 标的释放在画板上描绘出直线来;当 source==op3 时进行圆和椭圆绘画, 在实现圆和椭圆绘画的功能时,主要利用了鼠标的点击,鼠标的释放和 鼠标的拖拽,通过鼠标的点击来扑捉圆和椭圆的一个坐标点,然后利用 鼠标的拖拽选择圆和椭圆的大小,最终通过鼠标的释放在画板上描绘出 圆和椭圆来;当 source==op4 时进行矩形绘画,在实现矩形绘画的功能 时,主要利用了鼠标的点击,鼠标的释放和鼠标的拖拽,通过鼠标的点 击来扑捉矩形的一个坐标点,然后利用鼠标的拖拽选择矩形的大小,最 终通过鼠标的释放在画板上描绘出矩形来。 2.2.3 填充功能(其中包括圆的填充,椭圆圆的填充,矩形圆的填充)
Java画图软件设计报告

佛山科学技术学院《可视化编程技术》课程设计报告画图软件设计学生姓名:***学号:**********年级专业:11级教育技术学2班指导老师:***学院:教育科学学院广东★佛山提交日期:2013年6月目录1. 前言 (2)2.概要设计 (3)2.1 开发环境 (3)2.2 画图软件功能 (3)2.3 界面设计 (3)2.4 类的框架结构图 (4)3. 详细设计 (4)3.1 使用的JAVA类的说明 (4)3.2 类的主要方法 (5)3.2.1 颜色选择器 (5)3.2.2 控制画笔样式 (5)3.2.3 选取颜色按钮的监听件类 (6)3.2.4 设计总体认识 (6)3.2.5 程序流程图 (7)4. 运行结果 (7)5. 测试分析 (8)5.1 程序运行情况 (8)6. 源程序 (8)参考文献 (14)设计总结 (14)摘要:该程序是一个图形界面的简单的java画图软件,具有良好的界面,使用人员能快捷简单地进行操作。
该画图软件操作较为简单,只需要一直按着左键就能根据你鼠标移动的方面,画出你想要的图案。
你也可以选择你自己想到的颜色和画笔的粗细。
而且可以显示你当前的画笔的状态。
界面为灰白对称。
是一个非常简单的作图工具,让人能轻松上手。
关键字:java,画图类,方法,事件1 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的画图工具,可以实现简单的画图作图功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
南邮Java实验报告1-综合图形界面程序设计

南邮Java实验报告1-综合图形界面程序设
计
自查报告。
在本次实验中,我设计了一个综合图形界面程序,实现了基本的图形绘制、文本输入和按钮操作功能。
在完成实验过程中,我对自己的工作进行了自查,总结如下:
1. 程序功能完整性,在实验中,我确保了程序能够实现基本的图形绘制、文本输入和按钮操作功能,并且能够正确响应用户的操作。
我对每个功能模块进行了测试,确保程序的功能完整性。
2. 界面美观度,在设计界面时,我注重了界面的美观度和用户体验,保证了界面的布局合理,颜色搭配和图形元素的大小比例协调,使得用户操作起来更加舒适。
3. 代码规范性,在编写代码时,我遵循了Java编程规范,命名规范和代码风格规范,确保了代码的可读性和可维护性。
我对代码进行了注释,方便他人阅读和理解。
4. 错误处理和异常处理,在程序中,我对用户的输入和操作进
行了错误处理和异常处理,保证了程序的稳定性和健壮性。
当用户
输入错误或者操作不当时,程序能够给出相应的提示或者处理方式。
5. 性能优化,在编写程序时,我尽量避免了冗余的代码和不必
要的计算,保证了程序的性能优化。
我对程序进行了性能测试,确
保程序能够在各种情况下都能够正常运行。
通过这次自查,我发现了一些不足之处,比如界面美观度还有
待提高,代码规范性需要进一步加强等。
在今后的学习和实践中,
我会继续努力改进自己的不足之处,提高自己的编程能力和程序设
计水平。
同时,我也会继续关注Java编程技术的发展,不断学习和
掌握新的知识和技能,为自己的成长和发展打下更加坚实的基础。
JAVA绘图实验报告

南京工程学院 实 验 报 告 课程名称 java基础 实验项目名称 图形用户界面设计 实验学生班级 实验学生姓名 学 号 同组学生姓名 无 实验时间 2012年11月 实验地点 实验成绩评定 指导教师签字 年 月 日一、实验目的和要求1.目的:掌握java awt及swing组件的使用方法,包括窗口、框架、对话框、布局方式、面板、文本编辑器、按钮、组合框等,合理利用委托事件处理模型,掌握不同组件,不同事件的事件处理方法,设计出能够响应事件的java图形用户界面。
2.要求:设计图形用户界面,事件处理,异常处理并弹出对话框,提示重新输入信息。
二、实验题目 验证哥德巴赫猜想,添加图形用户界面三、实验方法与步骤(需求分析、算法设计思路、流程图等)1.添加图形用户界面 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class gdbh extends frame implements actionlistener //窗口框架响应单击事件,利用awt组件设计框架 {private button button; //按钮 private textfield text1; //文本行 private textarea text2; //文本区 public gdbh() {super(验证哥德巴赫猜想); //设置框架窗口标题 this.setbounds(450, 200, 350, 400); //设置框架的位置和尺寸 this.setresizable(false); // 设置框架大小不可改变 this.setbackground(color.lightgray); //设置窗口背景颜色 this.setlayout(new flowlayout()); // 默认窗口流布局 中对齐 this.add(new label(输入一个整数)); text1=new textfield(,20); this.add(text1); button=new button(验证哥德巴赫猜想); this.add(button); button.addactionlistener(this); //为按钮注册单击事件监听器,委托当前对象处理事件 this.setlayout(new flowlayout()); //默认中对齐 text2=new textarea(20,25); text2.seteditable(false); this.add(text2); this.setvisible(true); //设置组件可见 this.addwindowlistener(new winclose()); // 为框架注册窗口事件监听器,委托winclose对象处理事件 }2.实现单击事件和窗口事件监听器接口 public void actionperformed(actionevent e) //单击事件处理方法,实现actionlistener接口 {string str =text1.gettext(); //获得文本行的字符串try {long num = long.parselong(str); // 将字符串转化成长整形text2.settext(yz(num)); }catch(numberformatexception n) {joptionpane.showmessagedialog(this, \+str+\字符串不能转换成整数,请重新输入!!); return; }}class winclose implements windowlistener //实现窗口事件监听器接口 {public void windowclosing(windowevent e) // 窗口关闭事件处理方法 {system.exit(0); //程序运行结束 } public void windowopened(windowevent e) {} public void windowclosed(windowevent e) {} public void windowiconified(windowevent e) {} public void windowdeiconified(windowevent e) {} public void windowactivated(windowevent e) {} public void windowdeactivated(windowevent e) {} }3.异常处理 若文本行中的字符串不能转化成长整形,将弹出对话框“字符串不能转换成整数,请重新输入!!;另外如果所输入的整数为小于等于2或大于2小于等于5 也会弹出一个对话框“输入错误!必须是大于2的偶数或大于5的奇数!!”(该窗口代码设置在yz()函数中)。
java课程设计报告 画图

淮海工学院计算机工程学院
课程设计报告
设计名称:面向对象课程设计
选题名称:图片浏览器
姓名:学号:
专业班级:网络工程
系(院):计算机工程学院
设计时间:2012.6.11~2012.6.22
设计地点:实验室、教室
4.课程设计成果
①主界面
②在画布中画图
③清除图像,提示对话框
④从文件中打开图像
⑤可多选
⑥显示打开的图像
⑦当下一张不存在时,提示用户
⑧当上一张不存在时,提示用户
⑨放大图片
⑩缩小图片
旋转图片的界面
5.课程设计心得
参考文献:
[1]耿祥义,张跃平.Java 2实用教程(第三版).北京:清华大学出版社,2008.
[2]耿祥义.Java课程设计.北京:清华大学出版社,2009.
[3]施珺,纪兆辉.Java语言实验与课程设计指导.南京:南京大学出版社,2010.
[4]java高手真经作者:刘中兵Java研究室出版社:电子工业出版社
[5]java2入门经典作者:(美)霍顿(Horton I.)著,潘晓雷等译出版社:机械工业出版社。
JAVA设计绘图软件(附源代码)

目录第一章选题简介 (3)第二章需求分析 (4)1.系统要实现的目标分析 (4)2.对输入输出数据及流程的分析 (4)3.开发环境及运行环境分析 (5)第三章系统设计 (6)1. 系统功能模块设计 (6)2. 类设计 (7)3. 界面设计 (8)第四章测试 (10)1.测试用例及结果 (10)2.程序功能的评价 (11)第五章总结 (12)1.遇到的问题及解决的方法 (12)2.开发体会及自评成绩 (12)参考文献 (13)第一章选题简介随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
JAVA是一门很优秀的编程语言,具有面向对象、与平台无关、安全、稳定和多线程等特点,是目前软件设计中极为健壮的编程语言。
JAVA不仅可以用来开发大型的应用程序。
而且特别适合Internet的应用开发。
JAVA确实具备“一次写成,处处运行”的特点,JAVA以成为网络时代最重要的编程语言之一。
本次课程设计主要是用JAVA实现画笔系统,其系统主要完成以下功能:设计一个画图程序,能利用它实现用三种类型的线条在画板上任意绘画、书写的功能,该画图程序还需具有橡皮擦功能以及清空整个画面的功能。
第二章需求分析1.系统要实现的目标分析●这个画图程序,最基本的功能是,作为一个画笔,能利用它实现用三种类型的线条在画板上任意绘画、书写的功能;●这个画图程序,还需具备橡皮擦的功能,利用这个橡皮擦能够擦除画板上的图案;●这个画图程序,还应该具备能够清除整个画板已绘制图画的功能。
2.对输入输出数据及流程的分析3.开发环境及运行环境分析Jcreator是Xinox Software公司开发的一个用于Java程序设计的集成开发环境(IDE),具有编辑、调试、运行Java程序的功能。
当前最新版本是Jcreator5.00,它又分为LE和Pro版本。
LE版本功能上受到一些限制,是免费版本。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
佛山科学技术学院《可视化编程技术》课程设计报告画图软件设计学生姓名:周敏婷学号: 2011914123年级专业:11级教育技术学2班指导老师:容汝佳学院:教育科学学院广东★佛山提交日期:2013年6月目录1. 前言 (2)2.概要设计 (3)2.1 开发环境 (3)2.2 画图软件功能 (3)2.3 界面设计 (3)2.4 类的框架结构图 (4)3. 详细设计 (4)3.1 使用的JAVA类的说明 (4)3.2 类的主要方法 (5)3.2.1 颜色选择器 (5)3.2.2 控制画笔样式 (5)3.2.3 选取颜色按钮的监听件类 (6)3.2.4 设计总体认识 (6)3.2.5 程序流程图 (7)4. 运行结果 (7)5. 测试分析 (8)5.1 程序运行情况 (8)6. 源程序 (8)参考文献 (14)设计总结 (14)摘要:该程序是一个图形界面的简单的java画图软件,具有良好的界面,使用人员能快捷简单地进行操作。
该画图软件操作较为简单,只需要一直按着左键就能根据你鼠标移动的方面,画出你想要的图案。
你也可以选择你自己想到的颜色和画笔的粗细。
而且可以显示你当前的画笔的状态。
界面为灰白对称。
是一个非常简单的作图工具,让人能轻松上手。
关键字:java,画图类,方法,事件1 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的画图工具,可以实现简单的画图作图功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet 所需的应用程序编程接口(API)。
Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。
还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。
Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。
作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。
Java语言去掉了C++语言的一些容易引起错误的特性。
Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。
2 概要设计2.1开发环境开发平台:Microsoft Windows XP Professional Service Pack 2开发工具:JBuilder 2007 + JDK 1.6.0_022.2画图软件功能功能 1:按着鼠标左键能随心所欲的画出想要的图形功能 2:可自助地选择画笔的粗细功能3:可自助地颜色选择功能4:可以显示你当前的画笔状态2.3界面设计图2.3 画图面板2.4类的框架结构图DrawPane属性package kasa;操作public class DrawPane extends Frameclass ButtonColorAction implements ActionListenerc lass ButtonCursor extends MouseAdapterclass ButtonStrokeAction implements ActionListenerclass Palette extends Panel implements MouseListener, MouseMotionListener图2.43详细设计3.1画图软件使用的Java类的说明类名:DrawPane类作用:主类,继承的父类: Frame类,构造方法DrawPane()实现了放各种组件,界面的构造,构造画图板颜色选择器和画笔的粗细等功能类名:ButtonColorAction 实现的接口:ActionListener作用:选取颜色按钮的监听事件类监听按钮动作类名:ButtonCursor作用:鼠标进入按钮变换光标样式监听事件类继承的类:MouseAdapter 继承了鼠标的适配器类名:ButtonStrokeAction作用:设置画笔的监听事件类实现的接口:ActionListener 作用:选取颜色按钮的监听事件类监听按钮动作类名:Palette 继承的父类:Panel类作用:画板类实现的接口:MouseListener, MouseMotionListener 重写了鼠标监听器的五个方法mouseMoved(MouseEvent e)、mouseDragged(MouseEvent e)、mouseExited(MouseEvent e)、mouseEntered(MouseEvent e)和mouseReleased(MouseEvent e)。
同时实现了MouseMotionListener接口,调用addMouseMotionListener(this)方法对鼠标的动作进行监听3.2类的主要方法3.2.1 颜色选择器:Panel pane = new Panel(new GridLayout(2, 1)); // 画笔颜色选择器Panel paneColor = new Panel(new GridLayout(1, 13)); // 12 个颜色选择按钮Button[] buttonColor = new Button[12];Color[] color = { Color.black, Color.blue, Color.cyan, Color.darkGray,Color.gray, Color.green, Color.magenta, Color.orange,Color.pink, Color.red, Color.white, Color.yellow }; // 显示当前颜色的面板3.2.2控制画笔样式:Panel paneStroke = new Panel(new GridLayout(1, 13)); // 控制画笔样式buttonStrokeAction = new ButtonStrokeAction();Button[] buttonStroke = new Button[11];buttonStroke[0] = new Button("1");buttonStroke[1] = new Button("3");buttonStroke[2] = new Button("5");buttonStroke[3] = new Button("7");buttonStroke[4] = new Button("9");buttonStroke[5] = new Button("11");buttonStroke[6] = new Button("13");buttonStroke[7] = new Button("15");buttonStroke[8] = new Button("17");buttonStroke[9] = new Button("■");buttonStroke[10] = new Button("●");drawWidth = new Label("颜色", Label.CENTER);drawCap = new Label("●", Label.CENTER);drawWidth.setBackground(Color.lightGray);drawCap.setBackground(Color.lightGray);paneStroke.add(drawWidth);3.2.3选取颜色按钮的监听事件类:class ButtonColorAction implements ActionListener {public void actionPerformed(ActionEvent e) {Colorcolor_temp=((Button) e.getSource()).getBackground();nonceColor.setBackground(color_temp);palette.setColor(color_temp);}}3.2.4设计的总体认识●JAVA设计的摘要●JAVA设计的目录结构●JAVA设计的概要和详细设计●JAVA设计的版权意识●JAVA设计需要编译的环境●JAVA设计的实用性3.2.5程序流程图图3绘制画图软件方法PAD 图4运行结果图4 画图软件结果显示开始 粗细选择 颜色选择 绘图 绘图5测试分析5.1程序运行情况:当运行程序的时候,你可以进入界面,单击你所需要的颜色和画笔的粗细来进行作图。
当你觉得你对你的画不满意的时候,你可以选择白色来清除你的画面。
6 程序清单:package kasa;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Frame;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.GridLayout;import bel;import java.awt.Panel;import java.awt.RenderingHints;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.image.BufferedImage;/** *JAVA版画图小工具 * * * @author kasa * */public class DrawPane extends Frame { // 画板private Palette palette = null; // 显示当前颜色的面板private Panel nonceColor = null; // 画笔粗细private Label drawWidth = null; // 画笔端点的装饰private Label drawCap = null; // 选取颜色按钮的监听事件类private ButtonColorAction buttonColorAction = null;// 鼠标进入按钮后光标样式的监听事件类private ButtonCursor buttonCursor = null; // 画笔样式的监听事件private ButtonStrokeAction buttonStrokeAction = null;/** * 构造方法 * */public DrawPane() { // 设置标题栏文字super("JAVA版画图小工具"); // 构造一个画图板palette = new Palette();Panel pane = new Panel(new GridLayout(2, 1)); // 画笔颜色选择器Panel paneColor = new Panel(new GridLayout(1, 13)); // 12 个颜色选择按钮Button[] buttonColor = new Button[12];Color[] color = { Color.black, Color.blue, Color.cyan, Color.darkGray,Color.gray, Color.green, Color.magenta, Color.orange,Color.pink, Color.red, Color.white, Color.yellow }; // 显示当前颜色的面板nonceColor = new Panel();nonceColor.setBackground(Color.black);paneColor.add(nonceColor);buttonColorAction = new ButtonColorAction();buttonCursor = new ButtonCursor();for (int i = 0; i < buttonColor.length; i++) {buttonColor[i] = new Button();buttonColor[i].setBackground(color[i]);buttonColor[i].addActionListener(buttonColorAction);buttonColor[i].addMouseListener(buttonCursor);paneColor.add(buttonColor[i]);}pane.add(paneColor); // 画笔颜色选择器Panel paneStroke = new Panel(new GridLayout(1, 13)); // 控制画笔样式buttonStrokeAction = new ButtonStrokeAction();Button[] buttonStroke = new Button[11];buttonStroke[0] = new Button("1");buttonStroke[1] = new Button("3");buttonStroke[2] = new Button("5");buttonStroke[3] = new Button("7");buttonStroke[4] = new Button("9");buttonStroke[5] = new Button("11");buttonStroke[6] = new Button("13");buttonStroke[7] = new Button("15");buttonStroke[8] = new Button("17");buttonStroke[9] = new Button("■");buttonStroke[10] = new Button("●");drawWidth = new Label("粗细", Label.CENTER);drawCap = new Label("●", Label.CENTER);drawWidth.setBackground(Color.lightGray);drawCap.setBackground(Color.lightGray);paneStroke.add(drawWidth);for (int i = 0; i < buttonStroke.length; i++) {paneStroke.add(buttonStroke[i]);buttonStroke[i].addMouseListener(buttonCursor);buttonStroke[i].addActionListener(buttonStrokeAction);if (i <= 8) {buttonStroke[i].setName("width");} else {buttonStroke[i].setName("cap");}if (i == 8) {paneStroke.add(drawCap);}}pane.add(paneStroke); // 将画笔颜色选择器添加到窗体中this.add(pane, BorderLayout.NORTH); // 将画图板添加到窗体中this.add(palette); // 添加窗口监听,点击关闭按钮时退出程序this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}}); // 设置窗口的大小this.setSize(new Dimension(400, 430)); // 设置窗口位置,处于屏幕正中央this.setLocationRelativeTo(null); // 显示窗口this.setVisible(true);}/** * 程序入口 * * @param args * 字符串数组参数 */public static void main(String[] args) {new DrawPane();}/** * 选取颜色按钮的监听事件类 * @author kasa * */class ButtonColorAction implements ActionListener { public void actionPerformed(ActionEvent e) {Color color_temp = ((Button) e.getSource()).getBackground();nonceColor.setBackground(color_temp);palette.setColor(color_temp);}}/** * 鼠标进入按钮变换光标样式监听事件类 * @author kasa * */class ButtonCursor extends MouseAdapter {public void mouseEntered(MouseEvent e) {((Button) e.getSource()).setCursor(new Cursor(Cursor.HAND_CURSOR));}public void mouseExited(MouseEvent e) {((Button) e.getSource()).setCursor(newCursor(Cursor.DEFAULT_CURSOR));}}/** * 设置画笔的监听事件类 * @author kasa * */class ButtonStrokeAction implements ActionListener { public void actionPerformed(ActionEvent e) {Button button_temp = (Button) e.getSource();String name = button_temp.getName();if (name.equalsIgnoreCase("width")) {drawWidth.setText(button_temp.getLabel());palette.setStroke(Float.parseFloat(button_temp.getLabel( )));} else if (name.equalsIgnoreCase("cap")) {drawCap.setText(button_temp.getLabel());if (button_temp.getLabel().equals("■")) {palette.setStroke(BasicStroke.CAP_SQUARE);} else if(button_temp.getLabel().equals("●")) {palette.setStroke(BasicStroke.CAP_ROUND);}}}}}/** * 画板类 * * @author kasa * */class Palette extends Panel implements MouseListener, MouseMotionListener { // 鼠标// X//坐标的位置private int mouseX = 0; // 上一次 X 坐标位置private int oldMouseX = 0; // 鼠标 Y 坐标的位置private int mouseY = 0; // 上一次 Y 坐标位置private int oldMouseY = 0; // 画图颜色private Color color = null; // 画笔样式private BasicStroke stroke = null; // 缓存图形private BufferedImage image = null;/** * 构造一个画板类 * */public Palette() {this.addMouseListener(this);this.addMouseMotionListener(this); // 默认黑色画笔color = new Color(0, 0, 0); // 设置默认画笔样式stroke = new BasicStroke(3.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); // 建立 1280 * 1024 的RGB 缓存图象image = new BufferedImage(1280, 1024, BufferedImage.TYPE_INT_RGB); // 设置颜色image.getGraphics().setColor(Color.white); // 画背景image.getGraphics().fillRect(0, 0, 1280, 1024);}/** * 重写 paint 绘图方法 */public void paint(Graphics g) {super.paint(g); // 转换为 Graphics2DGraphics2D g2d = (Graphics2D) g; // 获取缓存图形Graphics2DGraphics2D bg = image.createGraphics(); // 图形抗锯齿bg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 设置绘图颜色bg.setColor(color); // 设置画笔样式bg.setStroke(stroke); // 画线,从上一个点到新的点bg.drawLine(oldMouseX, oldMouseY, mouseX, mouseY); // 将缓存中的图形画到画板上g2d.drawImage(image, 0, 0, this);}/** * 重写 update 方法 */public void update(Graphics g) {this.paint(g);}/** * @return stroke */public BasicStroke getStroke() {return stroke;}/** * @param stroke 要设置的 stroke */public void setStroke(BasicStroke stroke) {this.stroke = stroke;}/** * 设置画笔粗细 * @param width */public void setStroke(float width) {this.stroke = new BasicStroke(width, stroke.getEndCap(),stroke.getLineJoin());}/** * 设置画笔端点的装饰* @param cap 参考java.awt.BasicStroke 类静态字段 */public void setStroke(int cap) {this.stroke = new BasicStroke(stroke.getLineWidth(), cap,stroke.getLineJoin());}/** * @return color */public Color getColor() {return color;}/** * @param color 要设置的 color */public void setColor(Color color) {this.color = color;}public void mouseClicked(MouseEvent mouseEvent) {}/** * 鼠标按下 */public void mousePressed(MouseEvent mouseEvent) { this.oldMouseX = this.mouseX = mouseEvent.getX();this.oldMouseY = this.mouseY = mouseEvent.getY();repaint();}public void mouseReleased(MouseEvent mouseEvent) {}/** * 鼠标进入棋盘 */public void mouseEntered(MouseEvent mouseEvent) { this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));}/** * 鼠标退出棋盘 */public void mouseExited(MouseEvent mouseEvent) { this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));}/** * 鼠标拖动 */public void mouseDragged(MouseEvent mouseEvent) { this.oldMouseX = this.mouseX;this.oldMouseY = this.mouseY;this.mouseX = mouseEvent.getX();this.mouseY = mouseEvent.getY();repaint();}public void mouseMoved(MouseEvent mouseEvent) {}}参考文献Java语言程序设计.清华大学出版社.丁振凡主编设计总结经过一个学期的JAVA学习,对JAVA编程有了一定的认识,在做这个课程设计的时候,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。