java课程设计图形编辑系统

合集下载

画图板java课程设计

画图板java课程设计

画图板java课程设计一、课程目标知识目标:1. 学生能掌握Java语言的基本语法和编程结构。

2. 学生能理解画图板的基本原理,掌握使用Java进行图形界面的设计与实现。

3. 学生能运用Java中的事件处理机制,实现与画图板的交互功能。

技能目标:1. 学生能运用Java编程技能,独立设计并实现一个简单的画图板程序。

2. 学生能通过本课程的学习,提升问题分析能力,运用Java语言解决实际问题。

3. 学生能运用所学的知识,对画图板程序进行调试和优化,提高程序的稳定性。

情感态度价值观目标:1. 学生通过动手实践,培养对编程的兴趣,增强学习Java语言的自信心。

2. 学生在小组合作中,培养团队协作能力,学会共同解决问题。

3. 学生能够认识到编程在现实生活中的应用,理解编程对解决实际问题的重要性。

分析课程性质、学生特点和教学要求:本课程为Java语言编程课程,旨在让学生掌握Java编程的基本技能,培养实际编程能力。

学生处于高年级阶段,具有一定的编程基础,对Java语言有初步了解。

根据教学要求,课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。

将目标分解为具体的学习成果:1. 学生能独立完成一个画图板程序的编写,实现基本绘图功能。

2. 学生能对画图板程序进行调试和优化,提高程序性能。

3. 学生在课程学习过程中,积极参与小组讨论,提升团队协作能力。

4. 学生通过课程学习,对编程产生浓厚兴趣,为后续深入学习奠定基础。

二、教学内容本课程教学内容围绕以下三个方面展开:1. Java基本语法和编程结构:包括数据类型、变量、运算符、控制结构、数组等基本概念,确保学生掌握Java编程的基础知识。

2. Java图形用户界面(GUI)设计:涉及Swing库的使用,重点讲解JFrame、JPanel等容器组件以及绘图相关的Graphics类,使学生能够实现画图板界面设计。

3. Java事件处理机制:介绍事件监听器、事件对象等概念,让学生了解并掌握画图板中鼠标、键盘等事件的处理方法。

java图形用户界面设计教程

java图形用户界面设计教程

第4章图形用户界面设计本章要点● Java图形用户界面设计的基本知识●布局管理器的应用● Java常用图形用界面设计组件的应用● Java常用组件事件处理的应用4.1 认识AWT包和Swing包用户界面是计算机用户与软件之间的交互接口。

一个功能完善,使用方便的用户界面可以使软件的操作更加简单,使用户与程序之间的交互更加有效。

因此图形用户界面(graphics user interface,GUI)的设计和开发已经成为软件开发中的一项重要的工作。

Java语言提供的开发图形用户界面(GUI)的功能包括AWT(Abstract Window Toolkit)和Swing两部分。

这两部分功能由Java的两个包来完成-awt和swing。

虽然这两个包都是用于图形用户界面的开发,但是它们不是同时被开发出来了。

awt包是最早被开发出来的。

但是使用awt包开发出来的图形用户界面并不完美,在使用上非常的不灵活。

比如awt包所包含的组件,其外观是固定的,无法改变,这就使得开发出来的界面非常死板。

这种设计是站在操作系统的角度开发图形用户界面,主要考虑的是程序与操作系统的兼容性。

这样做的最大问题就是灵活性差,而且程序在运行时还会消耗很多系统资源。

由于awt包的不足表现,SUN公司于1998年针对它存在的问题,对其进行了扩展,开发出了Swing,即swing包。

但是,SUN公司并没有让swing包完成替代awt包,而是让这两个包共同存在,互取所需。

awt包虽然存在缺点,但是仍然有可用之处,比如在图形用户界面中用到的布局管理器、事件处理等依然采用的是awt包的内容。

Java有两个主要类库分别是Java包和Javax包。

在Java包中存放的是Java语言的核心包。

Javax包是Sun公司提供的一个扩展包,它是对原Java包的一些优化处理。

swing包由于是对awt包的扩展和优化,所以是存放在Javax包下的,而awt包是存放在Java包下的。

Java的形化界面开发选择合适的框架与工具

Java的形化界面开发选择合适的框架与工具

Java的形化界面开发选择合适的框架与工具Java的图形界面开发选择合适的框架与工具Java是一种跨平台的编程语言,广泛应用于软件开发领域。

在图形界面开发方面,Java提供了多个框架与工具,开发者可以根据自身需求选择合适的组件和工具来进行开发。

本文将介绍几个常用的Java图形界面开发框架与工具,并分析它们的优势和适用范围。

一、Swing框架Swing是Java平台提供的主要图形界面开发框架之一。

它基于Java的AWT(Abstract Window Toolkit)框架,提供了丰富的GUI组件和强大的事件处理机制。

Swing具有良好的跨平台性能和灵活的可定制性,适用于开发各种类型的桌面应用程序。

Swing框架提供了一系列面向对象的GUI组件,如按钮、标签、文本框、表格等,开发者可以通过组合这些组件来构建复杂的用户界面。

此外,Swing还支持图形渲染、国际化和可访问性等功能,使得应用程序更加美观、易用和易于维护。

二、JavaFX框架JavaFX是Java平台的另一个重要图形界面开发框架。

它是在Java SE 8及其之后版本中引入的,作为Swing的继任者。

JavaFX框架提供了现代化的UI组件和丰富的动画效果,支持CSS样式表和FXML布局文件,极大地简化了界面设计和开发流程。

JavaFX具有良好的性能和优秀的渲染效果,在图形处理、媒体播放和界面布局等方面有着卓越的表现。

它的线程模型也更加灵活,能够实现响应式的用户界面设计。

三、AWT框架AWT是Java最早引入的图形界面开发框架。

它是使用本地窗口系统提供的原生组件,因此在外观和行为上与操作系统保持一致。

AWT 提供了一系列基本的GUI组件,如按钮、标签、文本框等,可以通过AWT的布局管理器来进行界面排版。

尽管AWT能够提供与操作系统一致的外观,但它的定制性和可扩展性相对较差。

另外,AWT的组件在跨平台上的兼容性也有一定的问题。

因此,在现代的Java应用程序开发中,AWT的使用相对较少,主要用于一些特定场景或需要与底层系统交互的应用。

Java语言程序设计:第十章 Java图形用户界面

Java语言程序设计:第十章 Java图形用户界面

t}ryesflrs{eaetmD{teer.fypaau{cltkC(l)o; seOperation(EXIT_ON_CLOSE);
选中“ToGoelnUyke}DsiItrMt.caiegmtjefaebreamxtaeIcHtncnmDnLheeaistoea}ep((gidf)oE.ctae;veinkxoaurarAc单.ntcllsstcieo.dTnc击ephmpoardrtetmotLi(i“FneoeEleokte(nnFnS)xoieiSttl”ec(te;kla)}iC”exzA.cgceplkneaetT=dtipsoS“rFtsanicoSNecrnaeeeav)(exlem(){nc;ASeellp”(iz)t)ei保;o()n存;)源{ 文U件I和M工an程a文g件er.getS

有间距
CENTER
的 East
组 容se器tHgap(int hgap)

setVgap(int vgap)

将组件间的水平间距设置为指定的值

将组件间的垂直间距设置为指定的值
下边的组件
South
天津职业技术师范大学
BorderLayout
…… class testFrame extends JFrame {
天津职业技术师范大学
BorderLayout
North

边 West 的
组 容器

上边的组件 CENTER
下边的组件
South
右 边 的 East 组 件
天津职业技术师范大学
BorderLayout
North
方法
左 BorderLay边out( )
West 的

图形化编程主题课程设计

图形化编程主题课程设计

图形化编程主题课程设计一、课程目标知识目标:1. 让学生掌握图形化编程的基本概念,如事件、循环、条件语句等。

2. 培养学生运用图形化编程软件进行程序设计和创作的技能。

3. 引导学生理解和掌握图形化编程中的坐标系、角色、背景等元素的使用。

技能目标:1. 培养学生运用逻辑思维和问题解决能力,设计出具有创意的编程作品。

2. 提高学生团队协作能力,学会在项目中分工合作,共同完成任务。

3. 培养学生通过图形化编程表达个人想法和创新意识的能力。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养主动探索、自主学习的精神。

2. 培养学生面对困难和挑战时,保持积极态度,勇于尝试和解决问题的能力。

3. 增强学生的自信心,让他们在创作过程中体验成功,树立编程学习的信心。

课程性质:本课程为实践性强的主题课程,注重培养学生的动手能力和创新能力。

学生特点:四年级学生具有一定的逻辑思维能力和计算机操作基础,对新鲜事物充满好奇心。

教学要求:结合学生特点,采用任务驱动法、小组合作法等教学方法,引导学生主动探索,提高编程实践能力。

在教学过程中,注重激发学生兴趣,关注个体差异,鼓励学生发挥个性,实现课程目标。

通过课程学习,使学生在知识、技能和情感态度价值观方面得到全面提升。

二、教学内容本课程教学内容紧密结合课程目标,按照以下大纲进行组织和安排:1. 图形化编程基本概念:- 编程软件的界面和功能介绍- 事件、循环、条件语句等基本编程元素2. 编程技能训练:- 坐标系、角色、背景的运用- 编程逻辑和结构设计- 创意编程作品的创作3. 实践项目与案例分析:- 任务驱动的项目实践- 小组合作完成项目任务- 分析经典编程作品,借鉴优秀创意4. 教学内容进度安排:- 第一周:介绍编程软件,学习基本概念- 第二周:掌握坐标系、角色、背景的使用- 第三周:深入学习循环、条件语句等编程元素- 第四周:进行项目实践,创作编程作品教材章节关联:- 第一章:计算机编程简介- 第二章:图形化编程软件的认识- 第三章:编程基本元素和结构- 第四章:编程实践与案例分析教学内容科学系统,结合教材章节,注重理论与实践相结合,旨在帮助学生掌握图形化编程的基本知识和技能,培养创新意识和团队协作能力。

Java的GUI设计打造美观直观的用户界面

Java的GUI设计打造美观直观的用户界面

Java的GUI设计打造美观直观的用户界面Java是一种广泛使用的编程语言,拥有着强大的图形用户界面(GUI)设计能力。

通过使用Java提供的各种GUI库和工具,开发人员可以轻松地创建美观、直观的用户界面。

本文将介绍一些在Java中实现这样的GUI设计的方法和技巧。

一、选择合适的GUI库在Java中,有多个GUI库可供选择,比如Swing、JavaFX等。

选择合适的GUI库是设计美观直观界面的第一步。

Swing是一个成熟的GUI库,提供了丰富的组件和布局管理器,可以满足大部分GUI设计需求。

JavaFX是Java官方推荐的GUI库,它提供了更现代化的界面设计风格和更优秀的性能。

二、使用布局管理器布局管理器是GUI设计中重要的一环,它定义了组件在窗口中的位置和大小。

Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout等。

通过合理选择和组合这些布局管理器,可以实现各种复杂的界面布局。

三、使用合适的图标和图片图标和图片在GUI设计中起着很重要的作用,可以通过它们来提升用户界面的美观性和直观性。

Java提供了处理图标和图片的功能和类库,开发人员可以使用这些功能来加载、处理和显示各种图标和图片。

四、使用合适的颜色和字体颜色和字体也是GUI设计中非常重要的元素,可以用来强调界面的重要信息或者创建特定的视觉效果。

Java提供了各种颜色和字体的类库和功能,可以用来选择合适的颜色和字体样式。

五、增加交互性一个好的用户界面应该具有良好的交互性,能够方便用户进行操作。

Java提供了丰富的事件处理机制和监听器,可以实现交互性功能。

开发人员可以通过监听用户的操作,及时响应并更新界面,实现更好的用户体验。

六、进行界面美化除了以上的基本设计原则,开发人员还可以通过一些额外的技巧来进一步美化用户界面。

比如使用渐变色背景、添加阴影效果、使用动画效果等。

这些技巧可以使界面更加生动、有趣,并提升用户的整体体验。

java画图课程设计

java画图课程设计

java画图课程设计一、教学目标本节课旨在让学生掌握Java基本绘图方法,能够使用Java编写简单的图形界面程序。

1.了解Java绘图的基本概念和方法。

2.掌握Java中常用的绘图类和方法。

3.理解图形界面程序的设计原理。

4.能够使用Java编写简单的图形界面程序。

5.能够灵活运用Java绘图方法,实现基本的图形绘制。

6.能够根据需求,设计并实现简单的图形界面程序。

情感态度价值观目标:1.培养学生对计算机编程的兴趣和热情。

2.培养学生解决问题的能力和创新精神。

3.培养学生团队协作和交流的能力。

二、教学内容本节课的教学内容主要包括Java绘图的基本概念和方法,以及图形界面程序的设计原理。

1.Java绘图基本概念和方法。

2.Java中常用的绘图类和方法。

3.图形界面程序的设计原理。

4.实例演示和练习。

三、教学方法本节课采用讲授法、案例分析法和实验法相结合的教学方法。

1.讲授法:用于讲解Java绘图的基本概念和方法,以及图形界面程序的设计原理。

2.案例分析法:通过分析典型案例,让学生理解和掌握Java绘图的方法和技巧。

3.实验法:让学生通过实际操作,动手编写Java程序,巩固所学知识。

四、教学资源1.教材:《Java程序设计》。

2.参考书:《Java绘图教程》。

3.多媒体资料:PPT课件。

4.实验设备:计算机。

五、教学评估本节课的评估方式包括平时表现、作业和考试。

1.平时表现:通过课堂参与、提问和回答问题等方式,评估学生在课堂上的积极性和主动性。

2.作业:布置相关的绘图程序练习,评估学生对Java绘图方法的掌握程度。

3.考试:期末考试中包含Java绘图相关的题目,评估学生对Java绘图的全面理解和应用能力。

六、教学安排本节课的教学安排如下:1.教学进度:按照教材的章节顺序,逐步讲解Java绘图的基本概念和方法。

2.教学时间:每节课45分钟,其中30分钟用于讲授和案例分析,15分钟用于实验和实践。

3.教学地点:计算机实验室,确保学生能够直接进行绘图程序的编写和运行。

java课程设计报告-java课程设计

java课程设计报告-java课程设计

Java 课程设计报告题目:文本编辑器班级:学号:姓名:成绩:日期:年月日目录一、综合设计的目的与要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3二、综合设计正文⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯31. 系统分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯31.1系统开发背景、开发范围、建设目标与必要性开发⋯⋯⋯⋯⋯⋯⋯⋯31.2需求分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯32.系统设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯32.1功能设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯32.2系统运行环境与开发工具⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯43 . 系统实施⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯4 3.1 源程序⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯43.2 .系统测试及部分截图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯12三、综合设计总结或结论⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯13四、参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯13《文本编辑器》一、综合设计的目的与要求要求在学生能够较熟练使用java 程序设计语言进行软件代码的编写,同时还要具备较好的项目分析的能力,加深对相关课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统的练习。

二、综合设计正文1系统分析1.1系统开发背景、开发范围、建设目标与必要性随着计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

当然对文本编辑操作仍然占据着重要地位,记事本是简单便捷的文本编辑器,可实现对文本编辑操作的基本功能。

1.2需求分析程序设计主要分为两大部分:简单 GUI 设计和程序功能设计。

通过 GUI 设计实现图形用户界面,提供图形菜单,方便用户操作。

使用Java 语言编写一个能够对输入文字进行操作,具有合理的界面,能够在界面中实现右键快捷方式,对文档内容进行编辑操作,并且能够顺利退出的程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA课程设计题目:图形编辑系统*名:**学号:*********班级: 计算机学院09级1班日期:2012年6月8日目录JAVA课程设计 (1)一、设计思路 (1)二、具体实现 (1)三、运行调试与分析讨论 (4)四、设计体会与小结 (9)五、参考文献 (9)六、附录 (9)一、设计思路将主界面设置为当前Windows风格的,然后在一个Container里分为菜单功能区域,和绘图区域。

在菜单功能区域里包含了打开已有图形,保存图形,画笔,直线,圆形,矩形,画笔颜色预设,画笔大小预设,调色板,橡皮,橡皮大小预设,以及清除等功能,在菜单功能区域的下方就是绘图区域,绘图区域主要是通过记录下鼠标移动点的位置来实现绘图功能的。

二、具体实现在该系统中要实现以下各功能:1、能用拖橡皮筋的手法绘制各类图形(直线、椭圆、矩形、):可以在菜单区域选择直线、椭圆、矩形等button控件然后在绘图区域用托橡皮的手法绘制各类图形;2、支持画笔颜色、大小设置:在系统的功能菜单区域可以设置画笔的颜色、大小,根据自己的喜好来绘制图形;3、能将画面中的所有图形存储到文件中:在菜单区域有保存功能,可以将绘制好的图形保存到自己的文件夹中;4、能从文件读取图形进行增补:可以打开自己已有的文件,将文件读取出来,将文件图形进行增补等工作;5、采用对话框获取图形文件名:在读取的时候可以读取文件名称;6、删除:在系统的右上角设有清除和橡皮擦,如果画有不满意的图形时,可以用橡皮擦进行擦除,如果想要把整幅图片的都要删除的话,可以点击清楚按钮将整幅图片删除。

系统的工作原理以及该系统流程图如下:图 1 系统流程图图 2 打开文件程序流程图图 3 保存文件程序流程图三、运行调试与分析讨论系统的详细设计代码请查阅附带的代码。

以下仅对各个界面进行截图展示:图3系统主界面图 3 画笔工具绘图的界面图 4 直线工具画图的界面图 5 圆形工具画图的界面图 6 矩形工具画图的界面图7 画笔大小与画笔颜色设置界面图9 橡皮檫与橡皮檫大小工具的使用的界面图10 调色板工具的界面图11 打开图片的界面图12 保存图片的界面运行JA V A程序中的pb文件,在pb中实例化paintboard文件显示系统的主界面,如图三所示,主界面有进入其他子功能的按钮,选择相应的按钮便可进行相应的画笔、圆形、矩形、直线、橡皮擦等一些操作,画图工具是针对鼠标的一些点的操作来进行画图实现的,在其中定义了三个类,一个点point类,一个界面和操作类paintboard类,一个主函数类,在主函数中实例化paintboard类实现界面操作,又在paintboard类中实例化点类,可以在各个功能里面来进行对点的操作实现画图功能,主要的功能为打开图片,保存图片,画笔圆形,矩形,直线,橡皮擦以及调色板的操作。

四、设计体会与小结通过几周的上课时间,为了要做好自己所做的项目,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对GUI组键的应用有了更深入的认识与掌握,另外还学到了一些新东西,比如JA V A 的SWING、AWT包,以前是没有接触过的,可是通过这次课程设计使得我们对这个包更了解。

通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习java 语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

五、参考文献[1]朱福喜,尹为民等编著.Java语言与面向对象程序设计.武汉:武汉大学出版社,2002.12[2]冯军,程超等编著.JBuilder 9.0程序设计.北京:中国水利水电出版社,2004.5[3]丁振凡,黎章等编著.Java语言实用教程..北京:北京邮电大学出版社,2005.8[4]何桥,李肃义等编著.Java程序设计简明教程.北京:中国水利水电出版社,2004.9六、附录程序的主要代码://pb.javapackage pb;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import java.awt.geom.*;import java.io.*;public class pb{public static void main(String args[]){ paintboard pp=new paintboard("画图程序"); }}// paintboard.javapackage pb;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import java.awt.geom.*;import java.io.*;public class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener{int x = -1, y = -1;int con = 1;//画笔大小int Econ = 5;//橡皮大小int toolFlag = 0;//toolFlag:工具标记//toolFlag工具对应表://(0--画笔);(1--橡皮);(2--清除);//(3--直线);(4--圆);(5--矩形);Color c = new Color(0,0,0); //画笔颜色BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//画笔粗细Point cutflag = new Point(-1, -1, c, 6, con);//截断标志Vector paintInfo = null;//点信息向量组int n = 1;FileInputStream picIn = null;FileOutputStream picOut = null;ObjectInputStream VIn = null;ObjectOutputStream VOut = null;// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/ Panel toolPanel;Button eraser, drLine,drCircle,drRect;Button clear ,pen;Choice ColChoice,SizeChoice,EraserChoice;Button colchooser;Label 颜色,大小B,大小E;//保存功能Button openPic,savePic;FileDialog openPicture,savePicture;paintboard(String s){super(s);addMouseMotionListener(this);addMouseListener(this);paintInfo = new Vector();/*各工具按钮及选择项*///颜色选择ColChoice = new Choice();ColChoice.add("black");ColChoice.add("red");ColChoice.add("blue");ColChoice.add("green");ColChoice.addItemListener(this);//画笔大小选择SizeChoice = new Choice();SizeChoice.add("1");SizeChoice.add("3");SizeChoice.add("5");SizeChoice.add("7");SizeChoice.add("9");SizeChoice.addItemListener(this);//橡皮大小选择EraserChoice = new Choice();EraserChoice.add("5");EraserChoice.add("9");EraserChoice.add("13");EraserChoice.add("17");EraserChoice.addItemListener(this);////////////////////////////////////////////////////toolPanel = new Panel();clear = new Button("清除");eraser = new Button("橡皮");pen = new Button("画笔");drLine = new Button("直线");drCircle = new Button("圆形");drRect = new Button("矩形");openPic = new Button("打开图片");savePic = new Button("保存图片");colchooser = new Button("调色板");//各组件事件监听clear.addActionListener(this);eraser.addActionListener(this);pen.addActionListener(this);drLine.addActionListener(this);drCircle.addActionListener(this);drRect.addActionListener(this);openPic.addActionListener(this);savePic.addActionListener(this);colchooser.addActionListener(this);颜色= new Label("画笔颜色",Label.CENTER); 大小B = new Label("画笔大小",Label.CENTER); 大小E = new Label("橡皮大小",Label.CENTER); //面板添加组件toolPanel.add(openPic);toolPanel.add(savePic);toolPanel.add(pen);toolPanel.add(drLine);toolPanel.add(drCircle);toolPanel.add(drRect);toolPanel.add(颜色); toolPanel.add(ColChoice);toolPanel.add(大小B); toolPanel.add(SizeChoice);toolPanel.add(colchooser);toolPanel.add(eraser);toolPanel.add(大小E); toolPanel.add(EraserChoice);toolPanel.add(clear);//工具面板到APPLET面板add(toolPanel,BorderLayout.NORTH);setBounds(60,60,900,600); setVisible(true);validate();//dialog for save and loadopenPicture = new FileDialog(this,"打开图片",FileDialog.LOAD); openPicture.setVisible(false);savePicture = new FileDialog(this,"保存图片",FileDialog.SA VE); savePicture.setVisible(false);openPicture.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ openPicture.setVisible(false); }});savePicture.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ savePicture.setVisible(false); }});addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ System.exit(0);}});}public void paint(Graphics g)Graphics2D g2d = (Graphics2D)g;Point p1,p2;n = paintInfo.size();if(toolFlag==2)g.clearRect(0,0,getSize().width,getSize().height);//清除for(int i=0; i<n-1; i++){p1 = (Point)paintInfo.elementAt(i);p2 = (Point)paintInfo.elementAt(i+1);size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);g2d.setColor(p1.col);g2d.setStroke(size);if(p1.tool==p2.tool){switch(p1.tool){case 0://画笔Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);g2d.draw(line1);break;case 1://橡皮g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);break;case 3://直线Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);g2d.draw(line2);break;case 4://圆Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));g2d.draw(ellipse);break;case 5://矩形Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));g2d.draw(rect);break;case 6://截断,跳过i=i+1;break;default :}//end switch}//end if}//end for}public void itemStateChanged(ItemEvent e){if(e.getSource()==ColChoice)//预选颜色{String name = ColChoice.getSelectedItem();if(name=="black"){ c = new Color(0,0,0); }else if(name=="red"){ c = new Color(255,0,0); }else if(name=="green"){ c = new Color(0,255,0); }else if(name=="blue"){ c = new Color(0,0,255); }}else if(e.getSource()==SizeChoice)//画笔大小{String selected = SizeChoice.getSelectedItem();if(selected=="1"){con = 1;size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="3"){con = 3;size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="5"){ con = 5;size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="7"){ con = 7;size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="9"){ con = 9;size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}}else if(e.getSource()==EraserChoice)//橡皮大小{String Esize = EraserChoice.getSelectedItem();if(Esize=="5"){ Econ = 5*2; }else if(Esize=="9"){ Econ = 9*2; }else if(Esize=="13"){ Econ = 13*2; }else if(Esize=="17"){ Econ = 17*3; }}}public void mouseDragged(MouseEvent e){Point p1 ;switch(toolFlag){case 0://画笔x = (int)e.getX();y = (int)e.getY();p1 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p1);repaint();break;case 1://橡皮x = (int)e.getX();y = (int)e.getY();p1 = new Point(x, y, null, toolFlag, Econ);paintInfo.addElement(p1);repaint();break;default :}}public void mouseMoved(MouseEvent e) {}public void update(Graphics g){paint(g);}public void mousePressed(MouseEvent e) {Point p2;switch(toolFlag){case 3://直线x = (int)e.getX();y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;case 4: //圆x = (int)e.getX();y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;case 5: //矩形x = (int)e.getX();y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;default :}}public void mouseReleased(MouseEvent e) {Point p3;switch(toolFlag){case 0: //画笔paintInfo.addElement(cutflag);break;case 1: //eraserpaintInfo.addElement(cutflag);break;case 3: //直线x = (int)e.getX();y = (int)e.getY();p3 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p3);paintInfo.addElement(cutflag);repaint();break;case 4: //圆x = (int)e.getX();y = (int)e.getY();p3 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p3);paintInfo.addElement(cutflag);repaint();break;case 5: //矩形x = (int)e.getX();y = (int)e.getY();p3 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p3);paintInfo.addElement(cutflag);repaint();break;default:}}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){}public void actionPerformed(ActionEvent e){if(e.getSource()==pen)//画笔{ toolFlag = 0; }if(e.getSource()==eraser)//橡皮{ toolFlag = 1; }if(e.getSource()==clear)//清除{toolFlag = 2;paintInfo.removeAllElements();repaint();}if(e.getSource()==drLine)//画线{ toolFlag = 3; }if(e.getSource()==drCircle)//画圆{ toolFlag = 4; }if(e.getSource()==drRect)//画矩形{ toolFlag = 5; }if(e.getSource()==colchooser)//调色板{Color newColor = JColorChooser.showDialog(this,"调色板",c);c = newColor;}if(e.getSource()==openPic)//打开图片{openPicture.setVisible(true);if(openPicture.getFile()!=null){int tempflag;tempflag = toolFlag;toolFlag = 2 ;repaint();try{paintInfo.removeAllElements();File filein = new File(openPicture.getDirectory(),openPicture.getFile());picIn = new FileInputStream(filein);VIn = new ObjectInputStream(picIn);paintInfo = (Vector)VIn.readObject();VIn.close();repaint();toolFlag = tempflag;}catch(ClassNotFoundException IOe2){repaint();toolFlag = tempflag;System.out.println("can not read object");}catch(IOException IOe){repaint();toolFlag = tempflag;System.out.println("can not read file");}}}if(e.getSource()==savePic)//保存图片{savePicture.setVisible(true);try{File fileout = new File(savePicture.getDirectory(),savePicture.getFile());picOut = new FileOutputStream(fileout);VOut = new ObjectOutputStream(picOut);VOut.writeObject(paintInfo);VOut.close();}catch(IOException IOe){System.out.println("can not write object");}}}}//end paintboard//point.javapackage pb;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import java.awt.geom.*;import java.io.*;public class Point implements Serializable{int x,y;Color col;int tool;int boarder;Point(int x, int y, Color col, int tool, int boarder){this.x = x;this.y = y;this.col = col;this.tool = tool;this.boarder = boarder;}}。

相关文档
最新文档