java2图形设计卷Ⅱ学习小结
- 格式:doc
- 大小:290.50 KB
- 文档页数:43
图形设计期末总结在图形设计课程的学习中,我对于图形设计的基本概念,设计原则和技巧有了更深入的了解,并且通过实践项目,不断提升自己的设计能力。
本文将对我在图形设计课程中的学习经历进行总结,并分享一些我所学到的知识和经验。
首先,我通过课堂学习了图形设计的基本概念和设计原则。
图形设计是一门综合性较高的学科,不仅包含了艺术性的要素,还需要结合实际需求进行设计。
了解设计的基本概念对于进行有效的设计是非常重要的。
我学习了色彩原理、构图技巧、字体设计等方面的知识,并且通过实际操作将这些知识应用到项目中。
掌握了设计原则后,我在进行设计时可以更加有目的地去思考和选择,提高了设计作品的质量。
其次,我在课程中学习了一些设计软件的使用技巧。
在当今数字化时代,设计软件对于图形设计师来说是必备的工具。
我学习了Adobe系列软件,如Photoshop、Illustrator和InDesign,并逐渐掌握了它们的使用技巧。
例如,我学会了如何使用图层、渐变等功能来制作精美的图像,学会了使用插画工具进行向量绘图,还学会了如何进行页面排版等等。
这些技巧的学习为我后续的设计工作提供了更多的可能性和便利性。
在课程的项目中,我通过实践设计了一系列的作品,从而提高了自己的设计能力。
其中,一个项目是设计一个品牌标志。
通过这个项目,我学到了如何将一个品牌的核心特征转化为简洁、易于识别的标志,并且考虑到色彩、形状等方面的因素。
另一个项目是设计一本杂志封面。
我学到了如何通过合理的排版和图像选择来吸引读者的注意力,并且通过封面的设计来传达出杂志的内容和风格。
在每个设计项目中,我都会经历一个设计思考的过程。
我会首先进行素材收集和灵感搜索,然后通过草图和样式试验来寻找最佳的设计方案。
在这个过程中,我要考虑设计的目的和目标受众,同时要与客户或老师进行沟通和反馈,以便不断改进设计。
这个过程需要耐心和创造力,但却是非常有趣和富有挑战性的。
除了课堂学习和实践项目,我还通过参加设计比赛和展览来拓宽自己的视野和经验。
java期末作业总结在这个Java课程的期末作业中,我经历了许多的挑战和成长。
这次作业包含了许多知识点,涉及到了面向对象编程、异常处理、文件读写等多个方面。
通过这次作业,我不仅巩固了之前学到的知识,还学到了很多新的知识点。
在这次作业中,我主要做了一个电影票售卖系统。
这个系统的主要功能包括了购票、退票、电影信息展示等。
在实现这个系统的过程中,我采用了面向对象的思想,将系统中的各个功能模块抽象为一个个类,然后通过类之间的交互来完成各种操作。
这样的设计使得代码结构清晰,易于维护和扩展。
在这次作业中,我最大的收获就是对异常处理的理解和运用。
在实现购票和退票的功能时,需要处理一些异常情况,比如座位已被占用、余票不足等。
为了应对这些异常情况,我利用Java提供的异常机制,编写了相应的异常类,并在相关的方法中进行了异常抛出和捕获处理。
这样可以使得程序在遇到异常时能够进行相应的处理,保证了程序的稳定性。
除了异常处理,我还学到了很多关于文件读写的知识。
在系统中,需要将电影信息和售票记录保存在文件中,并在需要时进行读取。
为了实现这个功能,我学习了Java中的文件操作API,并编写了相应的文件读写方法。
通过这次实践,我不仅掌握了文件读写的基本操作,还学会了如何将文件读取的数据转换为程序中的对象,并进行相应的处理。
在整个实现的过程中,我也遇到了许多的困难和问题。
比如,在实现购票功能时,我遇到了如何判断座位是否已被占用的问题。
为了解决这个问题,我经过一番思考,最终决定将座位信息保存在一个二维数组中,然后通过坐标来判断座位是否被占用。
这种解决方式既简单又高效,使得程序能够正确地处理座位冲突。
在完成这次作业的过程中,我也发现了自己的不足之处。
比如,在设计系统架构和类之间的关系时,我有时候容易陷入纠结,难以做出决策。
这使得我在一些设计上花费了较多的时间,导致了进度的延迟。
为了解决这个问题,我意识到需要多加练习,不断学习和实践。
java实训总结收获java实训总结收获java实训总结收获,实训,即“实习(践)”加“培训”,下面带来java实训总结收获,欢迎阅读参考。
java实训总结收获【1】这一期的实习,虽然实习的时间不长,但是总体上收获挺大的,学习中我不但有了学习成果的喜悦,而且自己也日渐成熟,有种说不出的喜悦。
以下是我在这次实习中的一些感悟和体会:1.通过过这次实习,我们不仅在编程的理论知识上有所巩固和深化,更重要的是有了实战进行项目开发锻炼动手能力的机会,积累了一笔宝贵的经验。
我学会了如何团队合作,共同开发。
独木难支,光靠一个人的力量是远远不够的。
只有管理组织好一个团队,才能够最终完成项目的开发,或许在编程技术水平上团队成员有高有低,但是,每个人都有自己的闪光点,总可以在团队的找到适合自己的位置,每个人在自己的团队中做的贡献,创造出不可磨灭的重大价值。
2.有些知识点以前没有学过,但我也没有去研究,实习时突然间觉得自己真的有点无知,虽然现在去看依然可以解决问题,但要浪费许多时间,这一点是我必须在以后的学习中加以改进的地方,同时也要督促自己在学习的过程中不断的完善自我。
另外一点,也是在实习中必不可少的部分,就是同学之间的互相帮助。
3.我学会了如何理解和分析客户的需求。
软件为客户而生,只有理解了客户的需求才有写出优秀的软件的可能,在这次实战演练中,老师教会了我们如何组织团队正确的理解和分析客户的需求,并写出完善的需求分析,并用于项目开发。
4.我学会了对按照需求对软件架构进行设计,这点我想是我们许多同学之前都非常欠缺的,因为我们在学校的时编写代码篇幅短小,功能单一,所以设计思路通常只留于脑内,非常模糊。
而在这次项目开发演练中,老师手把手的教会我如何从需求中抽象出问题,并将之模块化,然后逐步求精,就如同为高楼大厦搭建栋梁。
此次实习,我深深体会到了积累知识的重要性。
在实习当中我们遇到了不少难题,但是经过我们大家的讨论和老师细心的一一指导,问题得到了解决。
java实训总结及心得(7篇)我们在学校机房进行了为期三周的JAVA实训。
现在即将结束了,回首本学期的java学习,重点还是在学习概念等一些常识性的东西,Application应用程序和Applet小程序,它的开发工具,数据类型,变量,接口,输入输出流,学会分析异常,抛出异常,后期主要是小程序运用,Gui界面设计和事件。
我觉得这两种程序结构有很大的不同,不管是体系结构还是运行方式,都有很大的区别,我主要偏向于小程序的学习,呵呵,因为感觉它用处比较大,可以做出好多好多好玩的游戏,运用程序等,且它灵活。
呵呵,当然学知识可不能凭自己的爱好和一时兴趣,要一步一个脚印,认认真真,踏踏实实,理论与实践相结合,在扎实掌握课本实例和内容之后,有一定的扩展阅读和课外学习,充分全面的了解JAVA的应用和扩展运用。
这次实训,我们更多学到的是不懂就问和自己应该尽自己的全力去尝试,哪怕失败,只要自己尽自己的全力,和身边同学一起探讨而不是抄袭,团结合作,发挥团队意识,最后在自己的努力下,终于运行成功,这种成就感美不可言,心情愉悦至极。
java实训总结及心得篇2 五个月在刚来的时候,觉得过得好慢,可转眼到了毕业又觉得时间过得好快,时间恐怕才是最会捉弄人的。
java培训结束即将走入工作岗位,我想先讲一个故事来切入正题。
有两拨人进行篮球比赛,可是一拨人有四个人,而另一拨只有3个,人数不均,显然人数居多的占优势。
比赛是不公平的,比赛快要停止的时候,拥有四人的队伍突然要求三人的队伍稍等5分钟。
正在三人队疑惑的时候,震惊的一幕开始了,另外四人走到篮板前,轮流开始投篮,每人十次,投的最少的被淘汰了,余下的三人回到比赛。
比赛的结果是什么我不知道,但我知道原来的三人组无论胜败,在他们取得成功的路上绝对比预期要困难的多。
与中国的仁义之道相比,物竞天择恐怕是社会乃至世界的本职,从细微处看不到的东西,我们就从宏观角度出发,又会发现什么呢中国五千年历史可以发现有用的东西,实在很少,原因是它是一个反对竞争的。
java总结及心得体会java总结及心得体会(通用8篇)java总结及心得体会要怎么写,才更标准规范?根据多年的文秘写作经验,参考优秀的java总结及心得体会样本能让你事半功倍,下面分享,供你选择借鉴。
java总结及心得体会篇1在本学期的开学初期,我们在学校机房进行了为期三周的JAVA实训。
现在即将结束了,回首本学期的java学习,重点还是在学习概念等一些常识性的东西,通过这次为期三周的实训,遇到了很多自己感兴趣的问题,就会很有兴趣,当然学知识可不能凭自己的爱好和一时兴趣,不能遇到自己不敢兴趣的问题就把它抛给同学,要学会自己踏踏实实认真的去解决问题。
要一步一个脚印,认认真真,踏踏实实,理论与实践相结合,在扎实掌握课本实例和内容之后,有一定的扩展阅读和课外学习,充分全面的了解JAVA的应用和扩展运用。
本次我们小组所做的程序是“小小通讯录”基本功能已经较好的完成,可是还是有一些不完善,比如我们的通讯录没有能够做到把通讯录里所储存的信息以列表的形式展现出来,所以还是有些不完善,,我们的指导老师对我们的程序作出了大体评价,发现我们的思想还是处于一个比较简单的过程当中,老师的几句简单评价,就带给我们无与伦比的冲击性,由于我们写程序的经验尚且较少,很多东西无法考虑到位,老师的点评,使我们认识到了不足与今后的前进方向与目标,使我们更加具有动力与激情,拥有了继续认真学习JAVA的信心,拥有了成为一位合格的高级程序员的壮志,在编写程序的过程当中,我们在一开始就遇到了问题,一直在纠结与是使用数据库连接还是使用文件,经过老师的耐心讲解,我们了解到了尚未接触到的Jar包等一些列名词,但是经过数据库的抒写与连接发现与无法同步,所以最终我们选择了使用文件来进行这次程序的编写,第二个问题就是我们的程序在进行按钮新窗口的链接,在新窗口弹出时,无法将老窗口关闭,纠结了好久,询问老师,老师还给我用了“父子”的生动例子来讲解,最终我们查找JDK,查找类的用法终于完美解决!甚是兴奋! 在我所学的语言当中,我自认为JAVA是一门比较强大的面向对象的编程语言,不仅仅因为它的跨平台性,更多的是因为它的灵活多变和实用性较强,可以说比较的经典和强悍。
java心得总结7篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如演讲致辞、策划方案、心得体会、条据文书、合同协议、应急预案、规章制度、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays for everyone, such as speeches, planning plans, reflections, legal documents, contract agreements, emergency plans, rules and regulations, teaching materials, essay summaries, and other sample essays. If you want to learn about different sample essay formats and writing methods, please stay tuned!java心得总结7篇写心得体会可以帮助我们更好地反思自己的行为和决策,心得体会是我们对过去经历的回顾,可以帮助我们更好地规划未来的发展方向,本店铺今天就为您带来了java心得总结7篇,相信一定会对你有所帮助。
java实验的心得体会java实验心得体会篇一:java实验总结1.设计一个Person类,包含:姓名,年龄,性别。
要求:该类至多只能创建一男、一女两个对象!2.设计一个测试类Test,创建若干个Person类对象,测试是否符合要求。
packagetest8;classperson{Stringname;intage;charsex;staticintflag1=1,flag2=1;privateperson(Stringn,inta,chars){name=n;age=a;sex=s;if(s=='m'){flag1--;}if(s=='f'){flag2--;}}publicstaticpersonnewperson(Stringn,inta,chars){ if(s=='m'&&flag1!=0){personp=newperson(n,a,s);returnp;}elseif(s=='f'&&flag2!=0){personp=newperson(n,a,s);returnp;}else{returnnull;}}publicStringtoString(){return("name:"+name+"age:"+age+"sex:"+sex);}}publicclasstest{publicstaticvoidmain(String[]args){personp1,p2,p3;p1=person.newperson("mary",11,'f');p2=person.newperson("tom",14,'m');p3=person.newperson("jane",13,'f');System.out.println(p1);System.out.println(p2);System.out.println(p3);}}1.设计一个数据单元类DataUnit,它包含学号(Number)和姓名(Name)两个数据成员。
java实验总结与心得
在进行Java实验的过程中,我获得了很多宝贵的经验和心得。
首先,通过实验我深刻理解了Java的基本语法和面向对象的思想。
实践中,我学会了如何定义类、创建对象、使用变量和方法等基本概念,并且能够灵活运用它们解决问题。
其次,实验过程中我学会了如何使用Java的集合框架来处理数据。
我了解了不同类型的集合类,例如ArrayList、LinkedList和HashMap等,并学会了它们的特点和适用场景。
通过实验,我发现合理选择和使用集合类可以提高程序的效率和可读性。
此外,实验还加深了我对异常处理的理解。
我学会了如何使用try-catch语句来捕获和处理异常,以及如何使用finally块来确保资源的释放。
通过实验中遇到的各种异常情况,我明白了异常处理在保证程序稳定性和可靠性方面的重要性。
在实验过程中,我也体会到了团队合作的重要性。
有时候,我们需要与他人合作完成一个大型项目,这要求我们具备良好的沟通和协作能力。
通过与同学们一起讨论和协商解决问题,我意识到团队合作可以提高工作效率和质量。
总结起来,通过Java实验,我不仅掌握了Java的基本语法和
面向对象的思想,还学会了使用集合框架和处理异常的技巧。
同时,实验也加强了我的团队合作能力和问题解决能力。
这些经验和心得
将对我今后的学习和工作产生积极的影响。
java学习心得体会_JAVA实训的心得(通用9篇)java学习_JAVA实训的心得篇11、我感觉学习java应该是循环渐进,有始有终,按部就班,脚踏实地。
java是一门有着阶梯性的一们语言,如果要学习它。
我觉得最好还是按照java的学习体系,先学习什么,在学习什么,只有这样,我们在学习中才会遇到更少的麻烦。
java是一门更倾向于网络的语言。
不要上来就学习JSP,这样不好,因为这没有基础。
在以后的学习中很可能遇到很多的麻烦,这就不好了。
2、信心,恒心,毅力是最重要的。
这是我们必须具备的心理素质。
要是学习这门语言开始的时候很有兴趣,遇到苦难就退缩,这样最终会放弃学习java,没有经历风雨怎么见彩虹。
编程就是有的时候就是那么这么人。
会遇到很多的困惑。
但是一旦你弄懂了,或者是你把问题解决了,你会感到很兴奋,编程的快乐就在此了。
3、多看看一些资料,多多的向高手请教,这样才好。
要学会总结和领会,当然,学习java一个人有一个人的想法,也有自己的独特学习方法。
总之适合自己的就是最好的。
java学习心得体会_JAVA实训的心得篇2从大三开始算,我学习java已经有一年的时间了,不过虽然时间长,但是对于现在的我还是一个初学者,懂不了多少的java初学者。
期间曾迷茫过,曾困惑过,走了不少的弯路,老师布置的试验作业每次都是不会做,每次都是要问同学,这个代码什么意思啊?为什么用这条代码,用别的不行吗?甚至后来根本没耐心问,索性就复制同学的作业交上去。
但是都是各种0分,害的同学也这样,不过他能找老师反驳,而我却没实力。
渐渐的,我认识到这样下去是不行的,我必须改正自己的学习态度和方式。
接下提到的就是我这一年来的java学习心得。
刚一开始学习java时,我就已经学习过C语言,不过C语言学的不是很好,所以开始看到java的时候我很反感,看着源代码,都不知道失什么意思。
看书的时候一看到源代码就头疼,因为根本看不懂。
那段时间根本就是一无所获,在图书馆借了一本书,关java的语法特性,与别的语言相比的优点,什么跨平台,源代码公开,什么write 、 once 、 run 、 anywhere,能说得头头是道,可是一到具体的问题,想写一些具体的东西,问题就都来了,根本不知道该怎么下手。
java课设总结与心得Java课设总结与心得随着计算机技术的不断发展,Java作为一种流行的编程语言,在企业级应用、Web开发、移动应用等领域中得到了广泛的应用。
因此,参加Java课程或者进行Java相关的项目实践是非常有意义的。
在这篇总结与心得中,我将分享我的Java 课设经历,总结我所学到的知识,并分享一些心得体会。
一、课程设计在参加Java课程之前,我需要先了解Java的基本概念和语法,以及与Java相关的一些知识。
因此,我在课程中选择了以Java基础语法和应用开发为主题的课程设计。
在课程设计中,我首先学习了Java的基础语法,包括数据类型、变量、运算符、控制语句等。
然后,我通过编写一些简单的程序,巩固所学的知识。
在课程设计的最后阶段,我选择了一个简单的Web应用,以展示所学的Java基础知识和应用能力。
通过这个课程设计,我学到了很多新的知识和技能。
我学会了如何使用Java 编写代码,包括变量的初始化、数据类型的转换、控制语句的使用等。
我还学会了如何使用Java框架来构建Web应用,包括Spring和Struts等。
同时,我也意识到了Java作为一种面向对象的编程语言,其优点和特点,如可移植性、安全性等。
二、项目实践除了参加课程设计外,我还参加了一些Java项目实践。
这些实践使我更深入地了解了Java的应用和开发方式。
在项目中,我选择了一些实际应用场景,如企业级应用、移动应用等。
在这些项目中,我负责编写代码、测试应用、解决问题等。
通过实践,我学到了更多的Java知识和技巧,如异常处理、多线程编程、数据库操作等。
同时,我也学会了如何协作和沟通,包括与团队成员、产品经理、测试人员等的沟通和协作。
三、心得体会通过参加Java课程设计和实践,我学到了很多新的知识和技能,并深刻认识到了Java作为一种流行的编程语言的优势和应用价值。
同时,我也体会到了Java 开发过程中的一些常见问题和解决方法,如代码冗余、性能优化等。
《java 2 图形设计卷Ⅱ》学习小结4.轻量事件通知由“模型”一节我们知道,模型能够提供轻量通知和状态通知两种通知。
轻量通知使用一个只知道事件源的ChangeEvent(变化事件),状态通知则使用提供有关变化的更多信息的事件。
变化事件由一些事件来处理,这些对象的类实现ChangeListener接口。
接口总结3-1对ChangeListener接口进行了总结。
接口总结3-1 ChangeListenerpublic abstract void stateChanged (ChageEvent)与大多数监听器一样,ChangeListener接口只定义了一个方法。
StateChanged方法以ChangeEvent的一个实例作为参数。
类总结3-1中介绍了ChangeEvent类。
类总结3-1 ChangeEvent扩展:java.util.EventObject构造方法public ChageEvent(Object source)ChangeEvent类仅提供了一个构造方法,没有提供其他方法。
ChangeEvent构造方法以事件源作为参数。
图3-9所示的小应用程序通过监控滑杆的值来说明轻量通知。
一个变化监听器添加到这个小应用程序的滑杆中以获得滑杆值并更新这个小应用程序的状态区。
图3-9轻量通知例3-2列出了图3-9所示的小应用程序的代码例3-2一个滑杆的轻量通知import java.awt.*;import javax.swing.*;import javax.swing.event.*;public class Test extends JApplet{public void init(){JSlider slider = new JSlider(0,100,50);getContentPane().add(slider,BorderLayout.CENTER);slider.addChangeListener(new ChangeListener(){public void stateChanged(ChangeEvent e){JSlider s = (JSlider) e.getSource();showStatus(Integer.toString(s.getValue()));}});}}5.状态事件通知对不经常变化的模型属性,模型使用状态通知。
状态通知激发所有类型的事件,并且提供比事件源更多信息(轻量事件通知仅提供事件源一种信息)。
例如,当选取或取消选取一个单选按钮时,按钮模型将激发一个项事件。
6.属性变化通知当模型的关联属性变化时(当一个属性的变化激发一个属性变化事件,则这个属性称作关联属性。
)模型会以一个java.beans.PropertyChangeEvent的形式产生状态通知。
属性变化通知由一些对象来处理,这些对象的类实现java.beans.PropertyChangeListener接口,接口总结3-2中总结了这个接口。
import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.beans.*;public class Test extends JFrame {JTree tree = new JTree();public Test() {Container contentPane = getContentPane();JScrollPane scrollPane = new JScrollPane(tree);contentPane.add(new ControlPanel(), BorderLayout.NORTH);contentPane.add(scrollPane, BorderLayout.CENTER);tree.addPropertyChangeListener(new PropertyListener());}class ControlPanel extends JPanel {JCheckBox showRoot = new JCheckBox("show root node");public ControlPanel() {showRoot.setSelected(tree.isRootVisible());setLayout(new FlowLayout());add(showRoot);showRoot.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {tree.setRootVisible(showRoot.isSelected());}});}}class PropertyListener implements PropertyChangeListener {public void propertyChange(PropertyChangeEvent e) { String name = e.getPropertyName();if(name.equals(JTree.ROOT_VISIBLE_PROPERTY)) {String msg = "Root Visible Property: " +e.getNewValue().toString();JOptionPane.showMessageDialog(Test.this, // parent compmsg, // message"Property Change", // titleRMA TION_MESSAGE);}}}例4-7 不容透明Swing组件import javax.swing.*;import java.awt.*;public class OpaqueTest extends JApplet {public void init() {Container contentPane = getContentPane();RainPanel rainPanel = new RainPanel();ColoredPanel opaque = new ColoredPanel(),transparent = new ColoredPanel();// JComponents are opaque by default, so the opaque// property only needs to be set for transparenttransparent.setOpaque(false);rainPanel.add(opaque);rainPanel.add(transparent);contentPane.add(rainPanel, BorderLayout.CENTER);System.out.println(opaque.isOpaque());System.out.println(transparent.isOpaque());}}class RainPanel extends JPanel {ImageIcon rain = new ImageIcon(this.getClass().getResource("rain.gif")); private int rainw = rain.getIconWidth();private int rainh = rain.getIconHeight();public void paintComponent(Graphics g) {Dimension size = getSize();for(int row=0; row < size.height; row += rainh)for(int col=0; col < size.width; col += rainw)rain.paintIcon(this,g,col,row);}}class ColoredPanel extends JPanel {public void paintComponent(Graphics g) {super.paintComponent(g);Dimension size = getSize();g.setColor(Color.black);g.drawRect(0,0,size.width-1,size.height-1);g.setColor(Color.red);g.fillRect(size.width/2-25,size.height/2-25,50,50); }public Dimension getPreferredSize() {return new Dimension(100,100);}}4.3.7 立即绘制Swing组件例4-8 在事件处理方法中使用paintImmediately()import javax.swing.*;import java.awt.*;import java.awt.event.*;public class TestApplet extends JApplet {public void init() {Container contentPane = getContentPane();final JPanel panel = new JPanel();JButton button = new JButton("repaint");panel.setBackground(Color.blue);panel.setPreferredSize(new Dimension(100,100));contentPane.setLayout(new FlowLayout()); contentPane.add(button);contentPane.add(panel);button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {Color c = panel.getBackground();Dimension sz = panel.getSize();panel.setBackground(c == Color.blue ? Color.red : Color.blue);panel.paintImmediately(0,0,sz.width,sz.height);// for illustrative purposes onlytry {Thread.currentThread().sleep(5000);}catch(InterruptedException ex) {ex.printStackTrace();}}});}}拖动图片效果import javax.swing.*;import java.awt.*;import java.awt.event.*;class AutoscrollViewport extends JViewport {Point scrollTo = new Point(), last = new Point();boolean manualDragUnderway = false;final int increment;public AutoscrollViewport(Component component, int inc) {this.increment = inc;setView(component);setAutoscrolls(true);setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {last.x = e.getPoint().x;last.y = e.getPoint().y;manualDragUnderway = true;}});addMouseMotionListener(new MouseMotionAdapter() {public void mouseDragged(MouseEvent e) {Point drag = e.getPoint();Point viewPos = getViewPosition();Point offset = new Point(drag.x - last.x,drag.y - last.y);last.x = drag.x;last.y = drag.y;if(contains(drag)) {if(manualDragUnderway) {scrollTo.x = viewPos.x - offset.x;scrollTo.y = viewPos.y - offset.y;setViewPosition(scrollTo);}}else { // autoscrolling ...Rectangle bounds = getBounds();manualDragUnderway = false;if(drag.x > bounds.x + bounds.width) {// scroll rightviewPos.x -= increment;setViewPosition(viewPos);}if(drag.x < 0) {// scroll leftviewPos.x += increment;setViewPosition(viewPos);}if(drag.y > bounds.y + bounds.height) {// scroll downviewPos.y -= increment;setViewPosition(viewPos);}if(drag.y < 0) {// scroll upviewPos.y += increment;setViewPosition(viewPos);}}}});}}import javax.swing.*;public class AutoscrollTest extends JFrame{public AutoscrollTest() {JLabel label = new JLabel(new ImageIcon("pic.gif"));JViewport vp = new AutoscrollViewport(label, 3);getContentPane().add(vp, "Center");this.setVisible(true);}public static void main(String args[]){new AutoscrollTest();}}例4-21 用客户属性把一个动态目标分配给一个按钮import javax.swing.*;import java.util.*;import java.awt.*;import java.awt.event.*;import java.beans.*;public class ClientPropertiesTest extends JApplet {JButton button = new JButton("toggle target color");JComboBox targetCombo = new JComboBox();JPanel[] targets = { new JPanel(),new JPanel(),new JPanel() };public void init() {Container contentPane = getContentPane();Dimension targetPreferredSize = new Dimension(100,100);JPanel targetPanel = new JPanel();for(int i=0; i < targets.length; ++i) {targets[i].setBackground(Color.blue);targets[i].setPreferredSize(targetPreferredSize);targetPanel.add(targets[i]);}targetCombo.addItem("left");targetCombo.addItem("center");targetCombo.addItem("right");contentPane.setLayout(new FlowLayout());contentPane.add(button);contentPane.add(targetCombo);contentPane.add(targetPanel);button.putClientProperty("target", targets[0]);button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {Component c =(Component)button.getClientProperty("target");if(c != null) {Color bg = c.getBackground();c.setBackground(bg == Color.blue ?Color.red : Color.blue);c.repaint();}}});targetCombo.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {button.putClientProperty("target",targets[targetCombo.getSelectedIndex()]);}});button.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) {if(e.getPropertyName().equals("target")) {showStatus((String)targetCombo.getSelectedItem() +" panel set as target");}}});}public static void main(String args[]) {final JFrame f = new JFrame();JApplet applet = new ClientPropertiesTest();applet.init();f.setContentPane(applet.getContentPane());f.setBounds(100,100,300,250);f.setTitle("ClientPropertiesTest");f.setVisible(true);f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {f.dispose();System.exit(0);}});}}class PanelWithTitle extends JPanel {private String title;public PanelWithTitle(String title) {this.title = title;}public void paintComponent(Graphics g) {FontMetrics fm = g.getFontMetrics();Dimension size = getSize();int titleW = fm.stringWidth(title);g.setColor(Color.black);g.drawString(title, size.width/2 - titleW/2,size.height/2);}}例5-6 使用定制边框import java.awt.*;import javax.swing.*;import javax.swing.border.*;public class HandleBorder extends AbstractBorder { protected Color lineColor;protected int thick;public HandleBorder() {this(Color.black, 6);}public HandleBorder(Color lineColor, int thick) {this.lineColor = lineColor;this.thick = thick;}public void paintBorder(Component c, Graphics g, int x,int y, int w, int h) {Graphics copy = g.create();if(copy != null) {try {copy.translate(x,y);paintRectangle(c,copy,w,h);paintHandles(c,copy,w,h);}finally {copy.dispose();}}}public Insets getBorderInsets() {return new Insets(thick,thick,thick,thick);}protected void paintRectangle(Component c, Graphics g,int w, int h) {g.setColor(lineColor);g.drawRect(thick/2,thick/2,w-thick-1,h-thick-1);//g.drawLine(w-thick,0,w-thick,h);g.drawLine(0,20,w,20);}protected void paintHandles(Component c, Graphics g,int w, int h) {g.setColor(lineColor);g.fillRect(0,0,thick,thick); // upper leftg.fillRect(w-thick,0,thick,thick); // upper rightg.fillRect(0,h-thick,thick,thick); // lower leftg.fillRect(w-thick,h-thick,thick,thick); // lower rightg.fillRect(w/2-thick/2,0,thick,thick); // mid topg.fillRect(0,h/2-thick/2,thick,thick); // mid leftg.fillRect(w/2-thick/2,h-thick,thick,thick); // mid bottomg.fillRect(w-thick,h/2-thick/2,thick,thick); // mid right}}import javax.swing.*;import javax.swing.border.*;import java.awt.*;import java.awt.event.*;public class Test extends JApplet {public void init() {Container contentPane = getContentPane();JPanel[] panels = { new JPanel(),new JPanel(), new JPanel() };Border[] borders = { new HandleBorder(),new HandleBorder(Color.red, 8),new HandleBorder(Color.blue, 10) };contentPane.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));for(int i=0; i < panels.length; ++i) {panels[i].setPreferredSize(new Dimension(100,100));panels[i].setBorder(borders[i]);contentPane.add(panels[i]);}}}例5-8 ColorIcon类清单import com.sun.java.swing.JApplet;import java.awt.Color;import java.awt.Graphics;public class IconTest extends JApplet {ColorIcon redIcon;ColorIcon blueIcon;ColorIcon yellowIcon;public void paint(Graphics g) {redIcon.paintIcon(this, g, 0, 0);blueIcon.paintIcon(this, g, redIcon.getIconWidth() + 10, 0); yellowIcon.paintIcon(this, g, redIcon.getIconWidth() + 10 + blueIcon.getIconWidth() + 10, 0);}public IconTest() {redIcon = new ColorIcon(Color.red, 50, 50);blueIcon = new ColorIcon(Color.blue, 60, 60);yellowIcon = new ColorIcon(Color.yellow, 70, 70);}}import java.awt.*;import javax.swing.*;class ColorIcon implements Icon {private Color fillColor;private int w, h;public ColorIcon(Color fillColor, int w, int h) {this.fillColor = fillColor;this.w = w;this.h = h;}public void paintIcon(Component c, Graphics g, int x, int y) {g.setColor(Color.black);g.drawRect(x, y, w-1, h-1);g.setColor(fillColor);g.fillRect(x+1, y+1, w-2, h-2);}public int getIconWidth() {return w;}public int getIconHeight() {return h;}}例5-9 菜单项中的图标import java.awt.*;import javax.swing.*;class ColorIcon implements Icon {private Color fillColor;private int w, h;public ColorIcon(Color fillColor, int w, int h) {this.fillColor = fillColor;this.w = w;this.h = h;}public void paintIcon(Component c, Graphics g, int x, int y) {g.setColor(Color.black);g.drawRect(x, y, w-1, h-1);g.setColor(fillColor);g.fillRect(x+1, y+1, w-2, h-2);}public int getIconWidth() {return w;}public int getIconHeight() {return h;}}import java.awt.*;import javax.swing.*;public class Test extends JApplet {ColorIcon redIcon = new ColorIcon(Color.red, 40, 15),blueIcon = new ColorIcon(Color.blue, 40, 15),yellowIcon = new ColorIcon(Color.yellow, 40, 15);public void init() {JMenuBar mb = new JMenuBar();JMenu colors = new JMenu("Colors");colors.add(new JMenuItem(redIcon));colors.add(new JMenuItem(blueIcon));colors.add(new JMenuItem(yellowIcon));mb.add(colors);setJMenuBar(mb);}}例5-11 在许多组件中共享单图标的小应用程序import java.awt.*;import javax.swing.*;public class ColorIcon implements Icon {private int w, h;public ColorIcon(int w, int h) {this.w = w;this.h = h;}public void paintIcon(Component c, Graphics g, int x, int y) { Color fillColor = Color.lightGray;g.setColor(Color.black);g.drawRect(x, y, w-1, h-1);if(c instanceof JComponent) {JComponent jc = (JComponent)c;fillColor = (Color)jc.getClientProperty("fill color");}g.setColor(fillColor);g.fillRect(x+1, y+1, w-2, h-2);}public int getIconWidth() {return w;}public int getIconHeight() {return h;}}import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JApplet {private ColorIcon colorIcon = new ColorIcon(40, 15);private JPopupMenu popup = new JPopupMenu();private JButton button = new JButton("select a color ...",colorIcon);public void init() {addPopupMenuItems();button.putClientProperty("fill color", Color.red);Container contentPane = getContentPane();contentPane.setLayout(new FlowLayout());contentPane.add(button);button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {Dimension buttonsz = button.getSize();popup.show(button,buttonsz.width,buttonsz.height);}});}private void addPopupMenuItems() {JMenuItem redItem = new JMenuItem(colorIcon),blueItem = new JMenuItem(colorIcon),grayItem = new JMenuItem(colorIcon),yellowItem = new JMenuItem(colorIcon),blackItem = new JMenuItem(colorIcon),whiteItem = new JMenuItem(colorIcon),orangeItem = new JMenuItem(colorIcon);MenuItemListener listener = new MenuItemListener();redItem.putClientProperty("fill color", Color.red);redItem.addActionListener(listener);popup.add(redItem);blueItem.putClientProperty("fill color", Color.blue);blueItem.addActionListener(listener);popup.add(blueItem);grayItem.putClientProperty("fill color", Color.gray);grayItem.addActionListener(listener);popup.add(grayItem);yellowItem.putClientProperty("fill color", Color.yellow);yellowItem.addActionListener(listener);popup.add(yellowItem);blackItem.putClientProperty("fill color", Color.black);blackItem.addActionListener(listener);popup.add(blackItem);whiteItem.putClientProperty("fill color", Color.white);whiteItem.addActionListener(listener);popup.add(whiteItem);orangeItem.putClientProperty("fill color", Color.orange);orangeItem.addActionListener(listener);popup.add(orangeItem);}class MenuItemListener implements ActionListener {public void actionPerformed(ActionEvent e) {JComponent jc = (JComponent)e.getSource();button.putClientProperty("fill color",jc.getClientProperty("fill color"));button.repaint();}}}import java.awt.*;import javax.swing.*;public class Test extends JFrame{public Test() {this.setSize(300,300);JPanel panel = new MyJPanel();getContentPane().add(panel, "Center");}public static void main(String args[]){Test test= new Test();test.show();test.repaint(); //显示两次sss}}class MyJPanel extends JPanel {public void paintComponent(Graphics g) {int thick=6;g.translate(100,100);g.setColor(Color.red);g.drawLine(100,100,200,200);g.drawLine(0,0,100,0);g.fillRect(0-thick/2,0-thick/2,thick,thick); // upper leftg.fillRect(100/2-thick/2,0-thick/2,thick,thick); // upper leftg.fillRect(100-thick/2,0-thick/2,thick,thick); // upper leftSystem.out.println("sss");}}对于JFrame的更新import java.awt.*;import java.awt.event.*;import javax.swing.*;/*为了达到画线的功能,我们分别implements MouseListener与MouseMotionListener.*/public class MouseDemo3 extends JFrame implements MouseListener,MouseMotionListener{ int flag;//flag=1代表Mouse Moved,flag=2代表Mouse Draggedint x=0;int y=0;int startx,starty,endx,endy;//起始坐标与终点坐标public MouseDemo3(){Container contentPane=getContentPane();contentPane.addMouseListener(this);contentPane.addMouseMotionListener(this);setSize(300,300);show();addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}/*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/public void mousePressed(MouseEvent e){startx=e.getX();starty=e.getY();}public void mouseReleased(MouseEvent e){endx=e.getX();endy=e.getY();}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){}/*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()方法*/ public void mouseMoved(MouseEvent e){flag=1;x=e.getX();y=e.getY();repaint();}public void mouseDragged(MouseEvent e){flag=2;x=e.getX();y=e.getY();repaint();}public void update(Graphics g){g.setColor(this.getBackground());g.fillRect(0,0,getWidth(),getHeight());paint(g);}public void paint(Graphics g){g.setColor(Color.black);if (flag==1){g.drawString("鼠标坐标:("+x+","+y+")",10,50);g.drawLine(startx,starty,endx,endy);}if (flag==2){g.drawString("拖曳鼠标价坐标:("+x+","+y+")",10,50);g.drawLine(startx,starty,x,y);}}public static void main(String[] args){new MouseDemo3();}}在JPanel上画有端点的线import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.util.Vector;public class MyDrawPanelextends JFrame {public MyDrawPanel() {this.setSize(300, 300);JPanel panel = new MyJPanel();getContentPane().add(panel, "Center");}public static void main(String args[]) {MyDrawPanel myDrawPanel = new MyDrawPanel();myDrawPanel.show();}}class MyJPanelextends JPanelimplements MouseListener ,MouseMotionListener{public Point pointStart,pointEnd;public Vector vectorStart,vectorEnd;public boolean mouseReleased=false;public MyJPanel() {pointStart=new Point(100,100);pointEnd=new Point(200,200);vectorStart=new Vector();vectorEnd=new Vector();vectorStart.addElement(new Point(pointStart.x,pointStart.y));vectorEnd.addElement(new Point(pointEnd.x,pointEnd.y));this.addMouseListener(this);this.addMouseMotionListener(this);}public void paintComponent(Graphics g) {/*g.setColor(this.getBackground());g.fillRect(0, 0, getWidth(), getHeight());int thick = 6;g.setColor(Color.red);g.drawLine( pointStart.x, pointStart.y, pointEnd.x, pointEnd.y);g.fillRect( pointStart.x - thick / 2, pointStart.y - thick / 2, thick, thick); // upper leftg.fillRect( pointStart.x + ( pointEnd.x - pointStart.x) / 2 - thick / 2,pointStart.y + ( pointEnd.y - pointStart.y) / 2 - thick / 2, thick, thick); // upper leftg.fillRect( pointEnd.x - thick / 2, pointEnd.y - thick / 2, thick, thick); // upper left*/System.out.println("这是paintComponent方法");g.setColor(this.getBackground());g.fillRect(0, 0, getWidth(), getHeight());int thick = 6;g.setColor(Color.red);if (mouseReleased) {for (int count = 0; count < vectorStart.size(); count++) {int x1, y1, x2, y2;x1 = ( (Point) vectorStart.elementAt(count)).x;y1 = ( (Point) vectorStart.elementAt(count)).y;x2 = ( (Point) vectorEnd.elementAt(count)).x;y2 = ( (Point) vectorEnd.elementAt(count)).y;g.drawLine(x1, y1, x2, y2);g.fillRect(x1 - thick / 2, y1 - thick / 2, thick, thick); // upper leftg.fillRect(x1 + (x2 - x1) / 2 - thick / 2,y1 + (y2 - y1) / 2 - thick / 2, thick, thick); // upper leftg.fillRect(x2 - thick / 2, y2 - thick / 2, thick, thick); // upper left}}else{for (int count = 0; count < vectorStart.size()-1; count++) {int x1, y1, x2, y2;x1 = ( (Point) vectorStart.elementAt(count)).x;y1 = ( (Point) vectorStart.elementAt(count)).y;x2 = ( (Point) vectorEnd.elementAt(count)).x;y2 = ( (Point) vectorEnd.elementAt(count)).y;g.drawLine(x1, y1, x2, y2);g.fillRect(x1 - thick / 2, y1 - thick / 2, thick, thick); // upper leftg.fillRect(x1 + (x2 - x1) / 2 - thick / 2,y1 + (y2 - y1) / 2 - thick / 2, thick, thick); // upper leftg.fillRect(x2 - thick / 2, y2 - thick / 2, thick, thick); // upper left}g.drawLine( pointStart.x, pointStart.y, pointEnd.x, pointEnd.y);g.fillRect( pointStart.x - thick / 2, pointStart.y - thick / 2, thick, thick); // upper leftg.fillRect( pointStart.x + ( pointEnd.x - pointStart.x) / 2 - thick / 2,pointStart.y + ( pointEnd.y - pointStart.y) / 2 - thick / 2, thick, thick); // upper leftg.fillRect( pointEnd.x - thick / 2, pointEnd.y - thick / 2, thick, thick); // upper left}}/*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/public void mousePressed(MouseEvent e) {mouseReleased=false;this. pointStart.x = e.getX();this. pointStart.y = e.getY();vectorStart.addElement(new Point(e.getX(),e.getY()));System.out.println("Pressed"+vectorStart);}public void mouseReleased(MouseEvent e) {mouseReleased=true;this. pointEnd.x = e.getX();this. pointEnd.y = e.getY();vectorEnd.addElement(new Point(e.getX(),e.getY()));this.repaint();System.out.println("Released"+vectorEnd);}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}/*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()方法*/ public void mouseMoved(MouseEvent e) {// System.out.println("mouseMoved");}public void mouseDragged(MouseEvent e) {this. pointEnd.x = e.getX();this. pointEnd.y = e.getY();repaint();System.out.println("mouseDragged");}}例5-16 与一个工具条按钮和一个菜单项相关联的动作import java.awt.*;import java.awt.event.*;import java.beans.*;import javax.swing.*;public class Test extends JAppletimplements PropertyChangeListener {JPanel jp = new JPanel();JPanel cp = new JPanel(); // cp = checkbox panelJCheckBox jc = new JCheckBox("action enabled");JMenuBar mb = new JMenuBar();JToolBar tb = new JToolBar();Action saveAction = new SaveAction();Action exitAction = new ExitAction();public void init() {JMenu fileMenu = new JMenu("File");fileMenu.add(saveAction);fileMenu.add(exitAction);tb.add(saveAction);JCheckBoxMenuItem checkBoxItem =new JCheckBoxMenuItem("saved");associateActionAndCheckBoxItem(saveAction, checkBoxItem);fileMenu.add(checkBoxItem);mb.add(fileMenu);saveAction.addPropertyChangeListener(this);jp.setLayout(new BorderLayout(2,2));jp.add(tb, "North"); // toolbarjp.add(cp, "Center"); // checkbox panelcp.setLayout(new FlowLayout());cp.add(jc);Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout());getRootPane().setJMenuBar(mb);contentPane.add(jp, "Center");jc.setSelected(saveAction.isEnabled());jc.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent event) {saveAction.setEnabled(!saveAction.isEnabled());}});}public void propertyChange(PropertyChangeEvent e) {boolean b = ((Boolean)e.getNewValue()).booleanValue();showStatus("save action " + (b ? "enabled" : "disabled"));}private void associateActionAndCheckBoxItem(final Action action,final JCheckBoxMenuItem item) { item.setHorizontalTextPosition(JButton.LEFT);item.setVerticalTextPosition(JButton.CENTER);item.setEnabled(action.isEnabled());item.addActionListener(action);action.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) {String name = e.getPropertyName();if(name.equals()) {item.setText((String)e.getNewValue());item.revalidate();}else if(name.equals("enabled")) {item.setEnabled(((Boolean)e.getNewValue()).booleanV alue());item.repaint();}else if(name.equals(Action.SMALL_ICON)) {item.setIcon((Icon)e.getNewValue());item.revalidate();}}});}}class SaveAction extends AbstractAction {public SaveAction() {super("save", new ImageIcon("save.gif"));setEnabled(false);}public void actionPerformed(ActionEvent event) {String s = new String();Object o = event.getSource();if(o instanceof JButton) s += "ToolBar: ";else if(o instanceof JMenuItem) s += "MenuBar: ";System.out.println(s + " save");}}class ExitAction extends AbstractAction {public ExitAction() {super("exit");}public void actionPerformed(ActionEvent event) {System.exit(0);}}例6-7 转换鼠标坐标import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JApplet {private Point lastScreenPt = null;private final Container contentPane = getContentPane();private PanelWithStringouter = new PanelWithString(Color.orange),inner = new PanelWithString(Color.red),innermost = new PanelWithString(Color.yellow);public Test() {Font font = new Font("Times-Roman", Font.ITALIC, 26);contentPane.setLayout(new OverlayLayout(contentPane));contentPane.add(innermost);contentPane.add(inner);contentPane.add(outer);innermost.setMaximumSize(new Dimension(350,50));inner.setMaximumSize(new Dimension(450,200));outer.setMaximumSize(new Dimension(550,400));setFont(font);innermost.setFont(font);inner.setFont(font);outer.setFont(font);contentPane.addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent e) {Point pt = e.getPoint();outer.setString(SwingUtilities.convertPoint(contentPane, pt, outer).toString());inner.setString(SwingUtilities.convertPoint(contentPane, pt, inner).toString());innermost.setString(SwingUtilities.convertPoint(contentPane, pt, innermost).toString());SwingUtilities.convertPointToScreen(pt, contentPane);lastScreenPt = pt;repaint();}});}。