java学习的心得体会
当对生活有所感悟时,应当记录下来心得体会,这可以让我们在回首岁月时,了解自己的心灵成长之路。那怎么写出言辞合适的心得体会呢?以下是小编精心整理的《java学习的心得体会》的文章,希望能够很好的帮助到大家,谢谢大家对小编的支持和鼓励。
第一篇:java学习的心得体会
JAVA学习的心得体会
国家队每一次踢球失败后都要说这么一句:我们回去后要好好总结,下次会打得更好!
总结不代表就能改过原有的不足,也不代表就能进步了
(一)充分利用MSDN因为我个人觉得它胜过任何一本编程参考书
MSDN是 Microsoft 当前提供的有关编程信息的最全面的资源,它包含微软最新的技术数据库,加上易学易用的全文检索功能,让您迅速找到任何您需要的技术参考数据
(二)加强自我管理,善于作自我总结,分析自已的优点及缺点
中国境内百分之八十以上的领导人在百分之八十以上的场合的讲话中都有类似的观点,所以在这里我是不多说了,反正这一条用在什么行业什么地方都不会有错的,人生最大的敌人不是就是自已吗?管好自已认清自已,那还有什么搞不定的?
(三)养成良好的文档习惯
良好的文档是正规研发流程中非常重要的环节,一个好的程序是先写好设计文档再进行编程的,在设计文档的指导下,才能写出安全的代码。如果你不写文档,一开始就写程序,这样你就不会按已设计好的路线走,而是想到哪写到哪。小功能还好说,要是大功能,就容易混乱甚至失控.那么如何写文档呢?其实我认为没有统一的标准,虽然国家及一些NB的人总结了很多的模板,但每个人的习惯不同,如果你不加以修改或创新,就套用某个标准,我相信写起来会很吃力及说不清的难受,因此我觉得只要能将你的设计思想及实现算法或步骤描述清楚就是好的文档,我强烈建议广大程序员朋友们在写文档时要善于用图表来说明你的思想,我们不是作家,也可能作文都经常性地不及格,写出五官端正的文章对我们来说可能不容易啊!好好地利用VISIO,ROSE或别的工具来表达你的思想吧!
(五)代码风格要规范,严谨,效率要高。 (六)掌握好跟踪调试技巧. 跟踪调试程序是一件繁琐而又复杂的事情,所以掌握必要的调试策略及技巧却可以使这些工作变得轻松起来.强烈建议你去看一下老美Everett N.McKay及Mike Wooding写的书<>,你一定受益匪浅.
(七)养成自我测试的习惯
测试工作应由测试工程师来做,但在你写完一个模块或一个软件时,还是要自已先测试一下,保证不要出现一些低级的错误.
(八)善于交流善于沟通,特别是经常与一些高手交流一下学习的心得体会
有人说,程序员的性格大多内向不喜欢说话,其实是有些误会了,不是不喜欢而是话不投机,我的脑袋一天到晚都在不停地转,函数,数据,算法啊充满了我的世界,我那还有时间与你谈一些无聊的话题,话要找对人了,才容易谈下去,书上说过"听君一席话,胜读十年书",你要找的就是这种豁然开朗!
(九)阶段性地做一下专题总结
知识要温故而知新,因此我程序员要养成阶段性地做专题总结的习惯,比如你这个月学习或在做与多线程有关的模块或项目,那么在你做完后,你就可以好好地总结一下所有与多线程相关的技术,包括理论知识,实践方法以及各种技巧及优秀文章等等,这对你各种能力的提高将有很大的帮助,你试过了吗,如果没有,那就快点行动吧!
(十)要有持之以恒的精神
我只是想说明要学好任何一门技术,最好要有持之以恒精益求精的精神,特别是学一些比较抽象比较难的技术,除了思考一下你的学习方法以外,还必须坚定你的目标及信念!
第二篇:学习java的心得体会
1.我感觉学习java应该是循环渐进,有始有终,按部就班,脚踏实地.java是一门有着阶梯性的一们语言,如果要学习它.我觉得最好还是按照java的学习体系,先学习什么,在学习什么,只有这样,我们在学习中才会遇到更少的麻烦.java是一门更倾向于网络的语言.不要上来就学习JSP,这样不好,因为这没有基础.在以后的学习中很可能遇到很多的麻烦,这就不好了.
2.信心,恒心,毅力是最重要的.这是我们必须具备的心理素质.要是学习这门语言开始的时候很有兴趣,遇到苦难就退缩,这样最终会放弃学习java,没有经历风雨怎么见彩虹.编程就是有的时候就是那么这么人.会遇到很多的困惑.但是一旦你弄懂了,或者是你把问题解决了,你会感到很兴奋,编程的快乐就在此 了.呵呵^^
3.多看看一些资料,多多的向高手请教,这样才好.要学会总结和领会.^^^^^^^^^^,当然,学习java一个人有一个人的想法,也有自己的独特学习方法.总之适合自己的就是最好的,你说呢这位朋友?关于方法,还有很多,我就不在这里说了. 为什么会选修java
首要原因就是为了以后大学毕业后能找到一个好工作,放眼望去当今大部分公司只会要求两种夜宴c++和java,其他有一些公司也可能会要其他的语言,但最终的结果是你会回到这两类上。
第三篇:Java学习心得
专业:信息与计算科学班级:
姓名:学号:
日期:
河北建筑工程学院数理系
java语言产生于C++语言之后,是完全的面向对象的编程语言,充分吸取了C++语言的优点,采用了程序员所熟悉的C和C++语言的许多语法,同时又去掉了C语言中指针、内存申请和释放等影响程序健壮性的部分,可以说java语言是站在C++语言这个"巨人的肩膀上"前进的。
java采用的是相对简单的面向对象技术,去掉了运算符重载、多继承的复杂概念,而采用了单一继承、类强制转换、多线程、引用(非指针)等方式。
在java程序中不能采用地址计算的方法通过指针访问内存单元,大大减少了错误发生的可能性;而且java的数组并非用指针实现,这样就可以在检查中避免数组越界的发生。
Java语言学习要点
一、掌握静态方法和属性
静态方法和属性用于描述某一类对象群体的特征,而不是单个对象的特征。Java中大量应用了静态方法和属性,这是一个通常的技巧。但是这种技巧在很多语言中不被频繁地使用。理解静态方法和属性对于理解类与对象的关系是十分有帮助的,在大量的Java规范中,静态方法和属性被频繁使用。因此学习者应该理解静态方法和属性。Java在方法和属性的调用上是一致的,区别只表现在声明的时候,这和c++是不同的。
二、重视接口
在面向对象早期的应用中大量使用了类继承。随着软件工程理论
的不断发展,人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接口近年来逐渐成为Java编程方法的核心。另一方面,就应用而言,大部分开发是建立在规范基础之上的,不需要自己建立复杂的继承关系和庞大的类。因此读懂规范和用好规范已经成为应用程序开发人员的首要任务,Java各项规范的主要描述手段就是接口。
三、学好集合框架
Java描述复杂数据结构的主要方式是集合框架。Java没有指针,而是通过强大的集合框架描述数组、对象数组等复杂的数据结构。学好这些数据结构的描述方法对于应用程序编写,特别是涉及到服务器方、3层结构编程至关重要。程序员在这个时候不能再用诸如数据库结果集之类的结构描述数据了。
四、例外捕捉
Java对例外捕捉的强调是空前的,它强迫程序员用显著的与逻辑方法完全不同的方式描述例外捕捉,对于程序描述的完整性和严谨性有很大的意义。
总之学编程语言不仅仅是从理论上的学习,更重要的是要利用这门语言为你的思想服务。理解这门语言是首要的,但是要达到心领神会、融会贯通就必须勤动手,多去时间,多编一些例子。计算机科学是注重实践的学科,成功的软件开发人员无不经过大量的上机锻炼,只有理论和实践相结合才能真正掌握只是和技能。
第四篇:Java异常学习心得
Java异常学习心得
本文重在Java中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。 1.3 异常处理的流程
1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象
1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码 2 异常的分类 2.1 异常的分类 2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。 2.1.2 Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 2.2 每个类型的异常的特点 2.2.1 Error体系
Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。 2.2.2 Exception体系
Exception体系包括RuntimeException体系和其他非RuntimeException的体系
2.2.2.1 RuntimeException
RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
2.2.2.2 其他(IOException等等)
这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。 2.3 与C++异常分类的不同 2.3.1 其实,Java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的。(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。 2.3.2 C++中logic_error与Java中的RuntimeException是等价的,而runtime_error与Java中非RuntimeException类型的异常是等价的。 3 异常的使用方法
3.1 声明方法抛出异常 3.1.1 语法:throws(略)
3.1.2 为什么要声明方法抛出异常?
方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。
3.1.3 为什么抛出的异常一定是已检查异常?
RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。 3.1.4 注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。
3.2 如何抛出异常
3.2.1 语法:throw(略) 3.2.2 抛出什么异常?
对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。 3.2.3
异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。
3.2.4 创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。需要注意的是,唯一有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。 3.3 捕获异常
如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用户界面处理循环中。
3.3.1 语法:try、catch和finally(略)
控制器模块必须紧接在try块后面。若掷出一个异常,异常控制机制会搜寻参数与异常类型相符的第一个控制器随后它会进入那个catch 从句,并认为异常已得到控制。一旦catch 从句结束对控制器的搜索也会停止。
3.3.1.1 捕获多个异常(注意语法与捕获的顺序)(略) 3.3.1.2 finally的用法与异常处理流程(略) 3.3.2 异常处理做什么?
对于Java来说,由于有了垃圾收集,所以异常处理并不需要回收内存。但是依然有一些资源需要程序员来收集,比如文件、网络连接和图片等资源。
3.3.3 应该声明方法抛出异常还是在方法中捕获异常?
原则:捕捉并处理哪些知道如何处理的异常,而传递哪些不知道如何处理的异常
3.3.4 再次抛出异常
3.3.4.1 为什么要再次抛出异常?
在本级中,只能处理一部分内容,有些处理需要在更高一级的环境中完成,所以应该再次抛出异常。这样可以使每级的异常处理器处理它能够处理的异常。
3.3.4.2 异常处理流程
对应与同一try块的catch块将被忽略,抛出的异常将进入更高的一级。
4 关于异常的其他问题 4.1 过度使用异常
首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。
4.2 将异常与普通错误区分开
对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。 4.3 异常对象中包含的信息
一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常
带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。
第五篇:java论文 学习心得 图形界面
java图形化用户界面及Applet学习总结
一、javaApplet Application和Applet是Java程序的两种基本形式。
Applet是特殊的Java程序,它不需要专门的解释器来执行它,相对于Java Appliction的解释器,如JDK的java.exe,VJ++的jview.exe,Java Applet的解释器就是Internet的浏览器,确切地讲就是兼容Java的Internet浏览器。
Applet的工作原理:
1,.class和HTML保存在服务器
2,当浏览器向服务器请求下载嵌入了Applet的HTML文件时。
3,下载到客户端后,由浏览器解释HTML中的各种标记并显示在用户屏幕上,当浏览器遇到HTML文件中的一个特殊标记时,表明嵌有Applet程序,浏览器会根据Applet名字和位置把其字节码文件从WWW服务器上下载到本地。
4,利用浏览器本身拥有的Java解释器执行该字节码。
Applet类的使用:
Java Applet程序必须有一个主类,其父类是系统的Applet类,正是通过这个类才能完成Applet程序与浏览器的配合
存在于java.applet包中,从继承结构上说属于用户图形界面的java.awt包,是系统类java.awt.Panel的子类,由于Applet类的特殊,系统专门为它建立了一个java.applet包
Applet类是Panel的子类
Panel类的作用:
(1)包容和排列其他的界面元素,如按钮、对话框等;
(2)响应它所包容范围之内的事件,或把事件向更高层次传递。
Applet类的作用:
Applet在继承上述作用的基础上,还具有一些与浏览器和Applet 生命周期有关的专门方法
Applet类的主要方法:
1、完成初始化操作的init()方法
Applet的字节码文件从WWW服务器下载后,浏览器将自动创建一个Applet类的实例并调用它从Applet类那里继承来的init()方法。用户程序可以重载父类的init()方法,定义一些必要的初始化操作。
2、启动浏览器运行Applet的start()方法
Start()方法在init()初始化之后被自动调用,或者是Applet被重新启动时被系统自动调用。也就是说,当包含Applet的HTML页面被重新加载时,Applet实例就会被重新启动并调用start()方法,但是init()方法只被调用一次。
3、显示Applet界面的paint()方法
paint()方法的主要作用是在Applet的界面中显示文字、图形和其他界面元素。导致调用paint()方法的事件主要有三种:
1、Applet被启动之后
2、Applet 所在的浏览器窗口改变,包括大小、移动、被遮挡、重新显示等。
3、Applet的其他相关方法被调用,如repaint() paint()方法有一个固定的参数----Graphics类的对象g。
4、暂停Applet前执行的stop()方法
stop()方法类似于start()方法的逆操作,当用户暂停Applet之前,浏览器将首先自动调用stop()方法(例如用户转去查看其它网页)。用户可以重载Applet类的stop()方法。
5、消灭Applet之前执行的destroy()方法
当用户退出浏览器时,浏览器会自动调用此方法来完成一些释放资源、关闭连接之类的操作。
Applet与HTML文件的配合
在HTML中嵌入Applet的标记为
例如:
此标记至少需包括三个参数:
Code: 指明Applet字节码文件名
Height: 指明Applet界面占据的区域的高度,以像素为单位
Width: 指明宽度,以像素为单位 width= "500" height= "300"> 其他可选的参数: Codebase:当Applet文件与HTML文档不在同一目录时, 使用codebase来指明字节码文件的位置,这个位置使用URL格式
Alt: 当浏览器因某种原因不能执行字节码文件时,就把alt参数指明的信息显示给用户
align:表示Applet界面区域在浏览器窗口中的对齐情况
向applet传递参数
通过HTML文件的标记,applet可以从中获得所要的参数,使用方法为:
value= 参数值
> ……
在Applet中利用getParameter()方法来获取HTML传递来的参数,这个方法有一个字符串参数,表明它所希望获取的HTML参数的名字(即name指定的参数名),方法的返回值是一个字符串对象,即HTML中value指定的字符串。如果用户希望这个参数是其他类型,则要进行参数类型的转换
二、java图形化界面
图形化界面(graphics user interface ,GUI)使用图形形式,借助于窗口中的菜单。按钮等界面元素和鼠标元素,实现用户与计算机系统的交互作用。用户通过图形界面向计算机发布指令、控制操作,系统的运行结果也以图形界面方式显示给用户。图形用户界面生动形象、操作方便,深受广大用户的欢迎。
图形用户界面(GUI)的重要性:美观、易用、统一
为方便用户界面的开发,设计了专门的类库来生成各种标准图形界面元素,和处理图形界面的各种事件,这个类库就是java.awt包。AWT是abstract windows toolkit(抽象窗口工具集)的缩写。AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行,使得开发人员所设计的界面独立于具体的界面实现,可以适用于所有的平台。
java的GUI编程 (Graphic User Interface,图形用户接口),是在它的抽象窗口工具箱(Abstract Window Toolkit,AWT)上实现的,java.awt是AWT的工具类库,其中包括了丰富的图形、用户界面元件和布局管理器的支持。 构成图形界面的元素和成分可分为三类:
容器:用来组织其它界面成分和元素的单元(如窗口)。容器内包含的成分和元素可能又是一个容器(层层相套)
控制组件:是图形用户界面的最小单位之一,它里面不再包含其他的成分。
目前常用的控制组件有:
选择类的:复选框Checkbox、单选按钮CheckboxGroup,下拉列表List;
文字处理类的:文本框TextField、文本区域TextArea;
命令类的:按钮Button、菜单Menu等。
用户自定义成分:它不能被系统识别和承认,通常只能起到装饰、美化作用,而不能响应用户的动作,也不具有交互功能。
显示图像
Graphics类的
drawImage(URL地址,文件名)方法可显示图像.bmp 、.gif 、.jpeg、.png。
Image类
图像文件的URL:
URL picurl= new URL
(“http://xxx.yyy.edu/Applet/img1.gif”); 取一幅图像构成图像对象
Image img1 = getImage(picurl);
Image img2 =
getImage(getCodeBase(), “img2.gif”); 显示一幅图像:
g.drawImage(img1, x, y, this);
g.drawImage(img1, x, y,Color.red, this); g.drawImage(image1, x, y,x2,y2, this);
g.drawImage(image1, x, y,x2,y2,Color.red, this); 使用AWT控件
在AWT的概念中,窗口系统所显示的各种对象统称为控件:Button,Menu,List等等都是控件。
Java控件: 标签Label 按扭Buuton 选项框Choice 复选框和选项按扭Checkbox 列表框List 文本框TextField 文本区TextArea 滚动条Scrolbar 标签Label 构造函数
Label();构造一个空的标签,不显示任何内容。
Label(String label);构造一个显示内容为label的标签。
Label(String label, int alignment);
常用方法:getText(),setText()
请编写一个Applet,其功能为:在标签上输出字符串"Java程序"。要求标签以红色为背景,以白色为前景。
import java.applet.Applet; import java.awt.*; public class Applet1 extends Applet {
} 按扭Buuton 构造函数 Label p=new Label("
Java 程序
"); public void init( ) {
} add(p); p.setBackground(Color.red); p.setForeground(Color.white); Button() 创建一个没有标签的按钮。
Button(String label)
常用方法:
getLable()、setLabel()、addActionListener(ActionListener)、removeActionListener(ActionListener)
编写Applet, 其中包含两个按钮:按钮上的文本分别为"确定"和"取消"。当按下"确定"键时,通过paint()方法在(20,100)位置处,用兰色显示你按下"确定"按钮的次数;当按下的键是"取消"时,通过paint()方法在(20,120)位置处,用红色显示你按下"取消"按钮的次数。(要求"确定"和"取消"的次数同时显示在Applet中。)
import java.awt.*; import java .awt .event .*; import java.applet.*; public class Applet1 extends Applet implements ActionListener
{
int i1,i2; Button btn1,btn2; public void init() {
} public void paint(Graphics g) { g.setColor(Color.blue); i1=0; i2=0; btn1=new Button("确定"); btn2=new Button("取消"); add(btn1); add(btn2); btn1.addActionListener(this); btn2.addActionListener(this);
}
} g.drawString("你点击了"确定""+i1+"次",20,100); g.setColor(Color.red); g.drawString("你点击了"取消""+i2+"次",20,120);
public void actionPerformed(ActionEvent e) {
} if(e.getSource()==btn1) { i1++; } if(e.getSource()==btn2) { i2++; } repaint(); 文本框TextField 因为只允许有一行,所以当按下Enter或Return键时,ActionListener可以通过actionPerformed()知道这个事件。如果需要,还可以增加其他的组件监听者。
除了注册一个ActionListener,你还可以注册一个TextListener来接收关于个别击键的通知。它的回调方法是textValueChanged(TextEvent)。
请编写一个Applet实现如下功能:接受文本框输入的一个正整数,求该数的平方根,并在标签上输出。
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Applet1 extends Applet implements ActionListener {
Label
out, p;
TextField
in;
int x;
public void init( )
{
p=new
Label("请输入一个int型正整数: ");
out=new Label("
");
in=new TextField(8);
add(p);
add(in);
in.addActionListener(this);
add(out);
} public void actionPerformed(ActionEvent evt)
{
x=Integer.parseInt(in.getText());
out.setText(" "+x+"的平方根: "+Math.sqrt(x));
} } 滚动条Scrolbar 滚动面板提供了一种不能作为自由窗口的通用容器。它应当总是和一个容器相关联(例如,框架)。它提供了到一个更大的区域的视窗以及操纵这个视窗的滚动条。
画布Canvas 画布(Canvas)是一个可以在上面绘画的简单矩形背景组件,在画布里可以像Applet一样绘制图形 ,也可以直接用鼠标在上面操作。Canvas继承于Component类,有自己的Paint()方法,能响应鼠标和键盘事件。
创建
Canvas myCanvas = new Canvas(); 常用方法
setSize();
public void paint(Graphics g)
例:
import java.awt.*; import java.applet.*; class Mycan extends Canvas {
Mycan()
{
setSize(150,150);
setBackground(Color.blue);
}
public void paint(Graphics g)
} public class Canvas1 extends Applet
{
Mycan c;
public void init()
{
c=new Mycan();
add(c);
} } // 键盘事件KeyEvent 主要方法
char getKeyChar()
返回引发事件的按键的Unicode字符
String getKeyText() {
} g.setColor(Color.white); g.fillOval(50,50,50,50); g.setColor(Color.blue); g.drawString("canvas", 55,75);
返回按键的文本内容
例:编写Applet, 当按下的键盘键时,在Applet中通过paint()方法,在(25,20)位置处显示"你好!",释放该键时显示"再见!"。
public class Applet1 extends Applet implements KeyListener {
String s; int i; public void init(){ addKeyListener(this);
}
public void paint(Graphics g){
if(i==1) g.drawString (s,25,20);
} if(i==2) g.drawString (s,25,20); public void keyPressed(KeyEvent e){
i=1;
s=“你好!”;
repaint();
}
public void keyReleased(KeyEvent e){
i=2;
s=“再见!”;
repaint();
}
} 组件布局管理
容器里的组件的位置和大小是由布局管理器决定的。在Java编程语言中包含下面的布局管理器:
Flow Layout(Panel和Applets的缺省布局管理器) Border Layout(Window、Dialog及Frame的缺省管理程序) public void keyTyped(KeyEvent e){} Grid Layout Card Layout GridBag Layout 顺序布局(FlowLayout)
顺序布局(FlowLayout)是其中最基本的一种布置,是面板(Panel)和它的子类Applet的缺省布局管理器。面板是一个容器,可以容纳多个组件;Applet是它的子类,也继承了能容纳组件的能力。
顺序布局是指将一个个组件从左到右依次、从上到下依次排列,每个组件所占的空间依据各组件所指定的合适尺寸来安排,当一行容纳不下时,便自动安排在下一行。
FlowLayout();
FlowLayout(int align)
FlowLayout(int align,int hgap,int vgap);
参数分别为:对齐方式,横向和纵向以像素为单位的间距
setLayout(new FlowLayout(FlowLayout.RIGHT, 20, 40)); setLayout(new FlowLayout(FlowLayout.LEFT))
边界布局(BorderLayout)
边界布局(BorderLayout)是窗口类(Window,Frame,Dialog和FileDialog)的缺省布局管理器。
Border布局管理器为在一个Panel或Window中放置组件提供一个更复杂的方案。Border布局管理器包括五个明显的区域:右东左西上北下南和居中 。
当拉伸使用BordLayout布局管理器的容器,各个组件相对位置不变,中间部分组件的尺寸会发生变化,East和West位置的组件的宽度不变,高度随着改变,而South和North位置的组件的高度不变,宽度随之改变。
卡片布局(CardLayout)
卡片布局(CardLayout)将组件像卡片一样放置,每次只显示一个,实现界面之间的相互切换。能够帮助用户处理两个以至更多的成员共享同一显示空间。
CardLayout(); 创建间距为零的对象。
CardLayout(int hgap,int vgap); 创建带有水平hgap和垂直vgap间距的对象。
使用下列Card布局管理器方法转换到一个新卡中。
first(Container parent) 显示第一张卡片。 last(Container parent)
显示最后一张卡片。
next(Container parent) 显示下一张卡片,如果当前是最后一张,则显示第一张。
previous(Container parent) 显示前一张卡片。
show(Container parent,String name) 显示指定名称的组件。
网格布局(GridLayout)
网格布局(GridLayout)是把容器区域分为若干个网络,每一个网格可以放置一个组件。当改变容器大小后,其中的组件相对位置不变,但大小改变。容器中各个组件同高度、同宽度。各个组件的排列方式为:从上到下、从左到右一次排列。
其构造方法:
new GridLayout(int rows,int columns);
创建一个rows行columns列的GridLayout布局管理器对象。
Grid布局管理器总是忽略组件的最佳大小。所有单元的宽度是相同的,是根据单元数对可用宽度进行平分而定的。同样地,所有单元的高度是相同的,是根据行数对可用高度进行平分而定的。
setLayout(new GridLayout(int rows, int cols));
创建并安装一个带有规定好行数和栏数的Grid布局。对布局中所有组件所给的大小一样。
setLayout(new GridLayout(int rows, int cols, int hgap, int vgap);
面板(Panel)
Panel类(面板) 功能:容纳其他对象,安排合理布局
创建面板:
Panel myPanel=new Panel(); 一个面板对象被创建,为了能看得见,它必须添加到窗口或框架对象上。这一点用Container类中的add()方式可以做到。
add(myPanel); 将面板作为容器:
myPanel.add(button) 窗口 Frame类
功能 : 制作一般的独立窗口,它是构件容器
创建
Frame fmInstance=new Frame();
或
Frame fmInstance=
new Frame(“The window for test”);
将其显示到屏幕上
fmInstance.show()
注意:不用add() 窗口
主要方法
dispose, setVisible ,getTitle, setTitle等
窗口的相关事件: WINDOW_ACTIVATED WINDOW_DEACTIVATED WINDOW_OPENED WINDOW_CLOSED 代表窗口已被关闭(指关闭后)
WINDOW_CLOSING 代表窗口正在被关闭(指关闭前,如点击窗口的关闭按钮)
WINDOW_ICONIFIED 代表使窗口最小化成图标
WINDOW_DEICONIFIED 代表使窗口从图标恢复
由于通过实现接口XXXListener来完成事件处理时,要同时实现该接口中的所有方法。通常我们只是需要对其中的某些方法做处理,而不想实现所有的无关方法。
因此,为了方便起见,JDK1.1为某些监听器接口提供了适配器类(XXXAdapter),当需要对某种事件进行处理时,只需让事件处理类继承事件所对应的适配器类,只重写需要关注的方法即可,而无关的方法就不必实现了。
适配器是一个类而不是接口,因而处理事件的类只能继承一个适配器。
菜单
菜单是图形用户界面的重要组成部分,是由菜单条(MenuBar)、菜单(Menu)、菜单项(MenuItem)和复选菜单项(CheckboxMenuItem)等对象组成。
窗口加入菜单
创建菜单条
MenuBar mb=new MenuBar();
创建菜单项,并加入菜单条:
Menu m1=new Menu(“File”);mb.add(m1);
创建菜单子项,并加入菜单项:
MenuItem open=new MenuItem(“open”);
m1.add(open);
菜单条放入窗口:
Frame f = new Frame("MenuBar"); f.SetMenuBar(mb);
将各个菜单子项注册给实现了动作事件的监听接口
ActionListenter的监听者。
open.addActionListener(this);
为监听者定义actionPerformed(ActionEvent e)方法,
在这个方法中调用e.getSource()或
e.getActionCommand()来判断用户单击的菜单子 项,并完成这个子项定义的操作。
使用分隔线 m1.addSeparator();
使用菜单子项快捷键
MenuItem cut= new MenuItem(“Cut”,new
MenuShortcut(„x‟));
或cut.setShortcut(new MenuShortcut(„x‟));
复选菜单项(CheckboxMenuItem) CheckboxMenuItem mi2 = new CheckboxMenuItem("Persistent");应当用ItemListener接口来监视复选菜单。因此当复选框状态发生改变时,就会调用itemStateChanged()方法。
定义二级菜单
Menu m2=new Menu("Paste");
m2.add("Paste All");
m2.add("Paste Part");
弹出式菜单(PopupMenu)
弹出式菜单附着在某一个组件或容器上,一般它是不可见的,只有当用户用鼠标右键单击附着有弹出式菜单的组件时,这个菜单才“弹出”来显示
PopuMenu pm=new PopupMenu();
MenuItem item1=new MenuItem("copy");
Item1.addActionListener(this);
pm.add(item1);
TextArea ta=new TextArea();ta.add(pm);
对话框
自定义对话框
Dialog(Dialog owner) 创建主控对话框,指定其拥有者为另一对话框。
Dialog(Dialog ,String title) 同上,并加上标题。
Dialog(Dialog owener,String title,boolean modal) 创建对话框,指定其拥有者为另一个对话框,并可设置modal来指定是否要主控。
Dialog(Frame owner) 创建主控对话框,指定其拥有者为一窗口。
Dialog(Frame owner,boolean modal) 同上,但可设置modal来指定是否要主控。
Dialog(Frame owner,String title) 创建主控对话框,指定其拥有者为一窗口,并可设置标题。
Dialog(Frame owner,String title,boolean modal) 创建对话框,指定拥有者为一窗口,设置标题,并可设置modal来指定是否要主控。
void dispose() 销毁对话框对象。
String getTitle() 取得对话框的标题。
void hide() 隐藏对话框。
boolean isModal() 测试对话框是否为主控。
Boolean isResizable() 测试对话框是否可改变大小。
void setModal(boolean) 设置对话框为主控。
void setResizable(boolean resizable) 设置对话框是否可以改变大小。
void setTitle(String title)设置对话框的标题。
void show() 显示对话框。
对话框—文件对话框
FileDialog是Dialog类的子类,它创建的对象称为文件对话框。文件对话框是一个打开文件和保存文件的对话框窗口。文件对话框也必须依附一个窗口(Frame)对象。
FileDialog(Frame f,String s,int mode)
public String getDirectory() public String getFile()
内部类
在一个类的内部嵌套定义的类称之为内部类(Inner Class)。
内部类也有自己的成员变量和成员方法。同样可以通过建立内部类的对象,去访问其成员变量和调用其成员方法。
内部类可作为其他类的成员,而且可访问它所在类的成员。
在实现图形界面中对鼠标单击、窗口事件、点击菜单等,需要同时实现多个监听器接口,使用内部类,即可以定义多个内部类去分别实现不同的监听器接口,使事件处理很方便。
参考文献:
1. 吕凤翥,马皓《java语言程序设计》.清华大学出版社.2013 2. 国家863中部软件孵化器《java从入门到精通》.人民邮电出版社.2010