《Java面向对象程序案例教程课件汇总全书电子教案完整版课件(最新).pptx》由会员分享,可在线阅读,更多相关《Java面向对象程序案例教程课件汇总全书电子教案完整版课件(最新).pptx(234页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1章 Java概述Java是广泛应用的面向对象编程语言1.1Java语言的特点1.跨平台性Java源程序计算机系统1Java虚拟机字节码文件编译计算机系统2Java虚拟机1.1Java语言的特点2.面向对象抽象与封装、继承、动态3.安全性4.多线程5.简单易用1.2 Java的版本的版本1996年1月,第一个JDK-JDK1.0诞生;1997年2月18日,JDK1.1发布;1998年12月8日,Java2企业平台J2EE发布;1999年6月,SUN公司发布Java三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME);2000年5月8日,JDK1.3发布;2000年5月29日,
2、JDK1.4发布;2001年9月24日,J2EE1.3发布;2002年2月26日,J2SE1.4发布,此后Java的计算能力有了大幅提升;1.2 Java的版本的版本2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为JavaSE5.0;2006年12月,SUN公司发布JRE6.0;2009年12月,SUN公司发布JavaEE6;2011年7月28日,甲骨文发布JavaSE7;2014年3月18日,甲骨文发表JavaSE8;2017年9月21日,甲骨文发表JavaSE9。(2009年4月20日甲骨文收购SUN)1.3 搭建
3、搭建Java开发环境开发环境1.3.2 配置环境配置环境变量变量JAVA_HOME:指向的是JDK的安装路径,如C:ProgramFilesJavajdk1.8.0_131PATH:%JAVA_HOME%bin;CLASSPATH:%JAVA_HOME%libdt.jar环境变量的设置方法:右键点击我的电脑-属性-高级-环境变量,修改系统变量1.4Eclipse运行第一个Java程序步骤1:创建工程(Project)事先创建好工作目录(WorkSpace),在启动Eclipse时,将WorkSpace切换到工作目录。创建javaProject步骤2:创建包(可选,不创建包也可以)步骤3:创建类
4、(假设类名为HelloWorld)步骤4:输入源程序步骤5:运行1.4Eclipse运行第一个Java程序Java程序的运行方式1:在右键选中类HelloWorld,然后选中RunAsJavaApplication.2:在菜单中选择“Run-Run”3:点击运行按钮,选择HelloWorld程序运行后,在控制台窗口输出如下内容:Hello面向对象程序设计4:在命令行窗口编译运行编译Java程序:javacHelloWorld.java运行Java程序:javaHelloWorld1.5 HelloWorld程序分析程序分析classpublicmain()方法System.out.printl
5、n()方法提示提示:“System.out.println()”可以用下面的方式快捷输入:输入syso,然后使用快捷方式ALT+/。第2章 Java语言基础主要内容标识符和关键字代码注释数据类型常量和变量运算符与表达式控制语句方法和方法重载2.1 标识符符2.1.1标识符命名规则标识符,是指程序员在定义java程序时,自定义的一些名字。如类名、变量名、函数名、包名等。标识符的基本字母表为:26个英文字符大小写、数字、下划线和美元符号($)。不能以数字开头。不能是关键字。区分大小写。可以为任意长度。2.1 标识符符2.1.2标识符命名规范包名:小写字母类名:每个单词的第一个字母大写,其他字母小写
6、接口:与类名相同(可在最前加大写字母I)。方法:第一个单词全小写,后面的单词首字母大写,其他小写属性:第一个单词全小写,后面的单词首字母大写,其他小写常量:全使用大写字母,多个单词的用下划线连接2.1 标识符符2.1.3Java语言中的关键字abstractassertbooleanbreakbytecasecatchcharclassconstcontinuedefaultdodoubleelseenumextendsfinalfinallyfloatforgotoifimplementsimportinstanceofintinterfacelongnativenewpackagepriv
7、ateprotectedpublicreturnstrictfpshortstaticsuperswitchsynchronizedthisthrowthrowstransienttryvoidvolatilewhile2.2 代代码注注释2.2.1必须加注释的代码1.基本必加注释类(接口)构造函数方法全局变量字段/属性2.特殊必加注释典型算法。代码不明晰处。代码修改处。代码循环和逻辑分支组成的代码处。为他人提供的接口。2.2 代代码注注释2.2.2代码注释格式单行注释:“/”块注释:“/*.*/”文档注释:/*.*/,这种格式是为了便于javadoc程序自动生成帮助文档。在这种注释内部可以使
8、用各种Javadoc标记(见下页)注:这部分内容可以在讲完继承与多态再练习2.2 代代码注注释Javadoc标记解释version对类的说明标明该类模块的版本。since指定最早出现在哪个版本。author对类的说明标明开发该类模块的作者。see对类、属性、方法的说明。生成参考其他的JavaDoc文档的连接,也就是相关主题。link生成参考其他的JavaDoc文档,它和see标记的区别在于,link标记能够嵌入到注释语句中,为注释语句中的特殊词汇生成连接。eg.linkHellodeprecated用来注明被注释的类、变量或方法已经不提倡使用,在将来的版本中有可能被废弃param描述方法的参数
9、,是对方法的说明,对方法中某参数的说明。return描述方法的返回值,是对方法返回值的说明throws描述方法抛出的异常,指明抛出异常的条件exception对方法的说明对方法可能抛出的异常进行说明2.3 基本数据基本数据类型型2.3.18种基本数据类型类型位数数据范围默认值1boolean1位true和false两个值false2byte8位最大存储数据量是255,数据范围是-12812703char16位存储Unicode码,用单引号赋值。4short16位最大数据存储量是65536,数据范围是-327683276705int32位最大数据存储容量是232-1,数据范围是-231231-1
10、06long64位最大数据存储容量是264-1,数据范围为-263263-10L7float32位数据范围在3.4e-451.4e38,赋值时须在数字后加上f或F0.0f8double64位据范围在4.9e-3241.8e308,赋值时可以加d或D也可以不加0.0d2.3 基本数据基本数据类型型2.3.18种基本数据类型注意:前面表中的默认值指类中的属性,而在方法中定义的变量,如果不赋值就使用会产生错误。boolean类型只需要一位就可以,但内存是以字节为单位的,程序中定义一个boolean变量需占用一个字节。Java为每个基本数据类型都提供一个包装类,利用该类可以获取各基本类型的有关信息。例
11、例2.1 获取基本数据类型的取值范围2.3 基本数据基本数据类型型注意:整数的八进制、十六进制表示前缀0表示八进制,前缀0X表示十六进制。如:intdecimal=100;intoctal=0144;/十进制100inthexa=0 x64;/十进制1002.3 基本数据基本数据类型型2.3.2Java中的常量常量常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。例如:finaldoublePI=3.14;finalcharMALE=M,FEMALE=F;适当使用常量,可提高程序的可读性,有利于程序的维护。2.3 基本数据基本数据类型型2.3.3转义字符有些字符具有特
12、殊功能,如双引号用于字符串的开始和结束,单引号用于将字符括起来。如果字符串本身就包括双引号,如”Hesaid “Hello”。如果直接写:Stringstr=”Hesaid “Hello”;就会产生语法错误,因为”Hesaid “已经是一个完整的字符串,后面再接Hello”,显然不符合要求。为此Java使用转义字符将双引号转换成普通字符。用“”表示转义字符,即“”后面的字符被转义。2.3 基本数据基本数据类型型2.3.3转义字符符号字符含义a响铃(BEL)n换行(LF),将当前位置移到下一行开头r回车(CR),将当前位置移到本行开头f换页符(FF),将当前位置移到下页开头b退格(BS),将当前
13、位置移到前一列0空字符(0 x20)s字符串t水平制表(HT)(跳到下一个TAB位置)v垂直制表(VT)双引号单引号反斜杠ddd1到3位八进制数所代表的任意字符xhh1到2位十六进制所代表的任意字符uxxxx16进制Unicode字符(xxxx)2.3 基本数据基本数据类型型2.3.3转义字符例如:Strings1=“Hesaid “Hello”;“”作为转义字符的标志,那如何输出“”本身。例如:Strings2=“C:JavasrcHelloWord.java”;2.3 基本数据基本数据类型型例2.3转义字符的应用在这个例子中用到了String类的split()方法。split()方法用于把
14、一个字符串分割成子字符串数组。参数是一个正则表达式,用于指定分隔符。如Strings=“aaa:bbb:ccc”;Stringwords=s.split(“:”);但如果用特殊的字符(如、|、+、*等在正则表达式中有特殊意义的字符)作为分隔符,就要使用转义自费了。2.3 基本数据基本数据类型型如:Strings=aaa|bbb|ccc;Stringwords=s.split(|);Strings=aaa+bbb+ccc;Stringwords=s.split(+);Strings=aaabbbccc;Stringwords=s.split(+);2.4 运算符运算符2.4.1算术运算符+、-、
15、*与数学中的用法一致。操作符说明+加法-相加运算符两侧的值-减法-左操作数减去右操作数*乘法-相乘操作符两侧的值/除法-左操作数除以右操作数求余或取模-左操作数除以右操作数的余数+自增:操作数的值增加1-自减:操作数的值减少12.4 运算符运算符2.4.1算术运算符除法(/):两个整数相除,结果为整数,小数部分被舍去。两个实数相除结果为实数。例如5/3=15.0/3.0=1.6666666666666667求余数(%):不仅可以求两个整数相除的余数,还可以求两个实数相除的余数。例如:5.7%1.5=1.22.4 运算符运算符2.4.1算术运算符+、-有前置和后置两种使用方式。运算符前置,先使变
16、量值增减,再使用该变量,运算符后置,先使用该变量,再将变量值增减。例如;i=10;j=i+;/结果i=11,j=10i=10;k=+i;/结果i=11,j=11例2.4算数运算符的使用2.4 运算符运算符2.4.2关系运算符运算符描述=检查如果两个操作数的值是否相等,如果相等则条件为真。!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。检查左操作数的值是否大于右操作数的值,如果是那么条件为真。=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。j)&(i+k+);System.out.println(i+,+j+,+k);/10,20,30 inti=10,j=20,k
17、=30;booleanb=(ij)&(i+k+);System.out.println(i+,+j+,+k);/11,20,31例例2.6 逻辑运算符的短路运算与非短路运算2.4 运算符运算符2.4.4位运算符操作符 描述如果相对应位都是1,则结果为1,否则为0|如果相对应位都是0,则结果为0,否则为1如果相对应位值相同,则结果为0,否则为1按位补运算符翻转操作数的每一位,即0变成1,1变成0。按位右移运算符。左操作数按位右移右操作数指定的位数。无符号按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。注意:无符号的意思是将符号位当作数字位看待。2.4 运算符运算
18、符2.4.4位运算符例:19&60001001100000110000000102例:19|600010011000001100001011123例:1920001001100000100114例:19600010011000001100001010121例:190000000001001111111111101100:总是补0:有的系统补0,有些系统补1例例 2.7 位运算符的使用2.4 运算符运算符2.4.5赋值运算符操作符 用法等价于=s=is=i+=s+=is=s+i-=s-=is=s-i*=s*=is=s*i/=s/=is=s/i=s=is=s%i=s=is=s=s=is=si=s=
19、is=si=s&=is=s&i=s=is=si|=s|=is=s|i注意:a*=3+6;相当于a=a*(3+6);例2.8赋值运算的应用2.4 运算符运算符2.4.6条件运算符由?和:组成,是一个三元运算符,使用格式为:?:例如:max=ab?a:b;例2.9条件运算符的使用2.4 运算符运算符2.4.7字符串加运算符(+)将两个字符串连接起来例例2.10 字符串连接2.5 控制控制语句句选择结构语句:if语句、swtch语句循环结构语句:for语句、while语句、dowhile语句continue语句break语句return语句2.5 控制控制语句句1.if语句三种使用形式三种使用形式i
20、f(表达式)方法体if(表达式)方法体else方法体if(表达式1)方法体1elseif(表达式2)方法体elseif(表达式n)方法体nelse方法体n+12.5.1选择结构2.5 控制控制语句句1.if语句例:例:if(s60)System.out.println(“需要补考”);if(time=90)System.out.println(“优”);elseif(s=80)/没必要写elseif(s=80)&(s=70)System.out.println(“中”);elseif(s=60)System.out.println(“及格”);elseSystem.out.println(“不
21、及格”);2.5.1选择结构例例2.11 if语句的应用语句的应用2.5 控制控制语句句switch(表达式)case常量1:语句1 break;/可选case常量2:语句2 break;/可选 case常量n:语句n break;/可选 default:/可选 语句n+12.5.1选择结构2.switch语句使用格式多分支语句,表达式的值与哪个Case后面的常量相同就从哪里开始执行,如果没有与表达式相同的常量值,则从default后面开始执行,遇到break结束switch语句。表达式:整型或字符型各常量的值互不相同default可以没有2.5 控制控制语句句2.5.1选择结构2.switc
22、h语句例例2.12 switch语句的使用语句的使用。删除程序中的所有break语句,观察运行程序后有什么不同。inta=score/10;switch(a)为什么不直接使用 switch(score)2.5 控制控制语句句2.5.2循环结构1.for语句使用格式:for(表达式1;表达式2;表达式3)语句执行过程:首先求解表达式1然后求解表达式2如果表达式2为真,则执行语句执行完语句后,在求解表达式3,再求解表达式2,为真再执行语句,否则结束循环表达式1:通常是为循环变量初始化表达式2:循环条件,结果为真执行循环语句,为假结束循环表达式3:通常是改变循环变量的值,使循环趋于结束2.5 控制控
23、制语句句2.5.2循环结构1.for语句例:求1+2+3+100intsum=0;inti;for(i=1;i=100;i+)sum+=i;System.out.println(sum);例例2.13 使用使用for循环输出水仙花循环输出水仙花数数水仙花数是一个三位数,他的各位数的立方和与这个数本身相等注意:如何求一个整数的每一位数。2.5 控制控制语句句2.5.2循环结构2.while语句使用格式:while(表达式)语句执行过程:首先求解表达式如果表达式为真,则执行语句,否则结束循环执行完语句后,再判断表达式的真假,来决定循环是否结束2.5 控制控制语句句2.5.2循环结构2.while语
24、句例:求1+2+3+100intsum=0;inti=1;while(i=100)sum+=i;i+;System.out.println(sum);例例2.14 使用使用while实现实现循环循环2.5 控制控制语句句2.5.2循环结构3.dowhile语句使用格式:do 语句while(表达式);执行过程:首先执行语句再求解表达式如果表达式为真,则再次执行语句,否则结束循环2.5 控制控制语句句2.5.2循环结构3.dowhile语句例:求1+2+3+100intsum=0;inti=1;dosum+=i;i+;while(i=100);System.out.println(sum);例例
25、2.15 使用使用dowhile实现循环实现循环例例2.16 编写程序,实现一个简单的计时器编写程序,实现一个简单的计时器2.5 控制控制语句句2.5.3其他语句1.breakBreak可以用在switch语句中或循环语句中。其作用是结束switch语句或循环语句。2.continuecontinue这能用于循环语句中。其作用是结束本次循环,试图进入下次循环。3.returnreturn用于从方法返回。2.5 控制控制语句句2.5.3其他语句例例 求1100不能被3整除的整数之和(continue)inti;intsum=0;for(i=1;i=100;i+)if(i%3=0)continue
26、;sum+=i;System.out.println(sum);2.5 控制控制语句句2.5.3其他语句例例判断某个整数是否为素数(break)inti,n=11;for(i=2;iy)m=x;elsem=y;returnm;调用:inta=max(20,30);实参传递给形参返回值形参实参2.6 方法与方法重载2.6.2方法的调用1.有返回值方法的调用像刚才的例子。再看例例2.17 有返回值的方法调用有返回值方法的调用,可将返回值赋给一个变量,也可以直接输出,或者参与各种运算。2.6 方法与方法重载2.6.2方法的调用2.无返回值方法的调用如System.out.println()中的pri
27、ntln()方法就没有返回值,直接调用即可。例例2.18 无返回值的方法调用2.6 方法与方法重载2.6.3方法重载可以定义多个相同名字的函数,只要它们参数的个数或类型不完全一致即可,编译程序根据实参与形参的类型及个数自动确定调用哪一个同名函数,这就是函数重载,这些同名函数称为重载函数。2.6 方法与方法重载2.6.3方法重载如定义两个方法,分别求两个整数及两个实数的最大值。publicstaticintmax(intx,inty)if(xy)returnx;elsereturny;publicstaticdoublemax(doublex,doubley)if(xy)returnx;else
28、returny;2.6 方法与方法重载2.6.3方法重载例例2.19 方法重载第3章 数组3.1一维数组3.1.1一维数组的定义与使用定义格式:数据类型 数组名;或 :数据类型 数组名;然后:数组名=new 数据类型数组元素个数;定义数组时只是说明定义的数组,具体有多少个元素以及这些元素保存在什么地方,是通过new实现的。数组元素的个数可以用数组的length属性获知。3.1一维数组3.1.1一维数组的定义与使用例如a12345int a;a=new int5;a0=1;a1=2;a2=3;a3=4;a4=5;3.1一维数组3.1.1一维数组的定义与使用例例3.1 遍历数组例例3.2 使用属性
29、length来获取数组的长度3.1一维数组3.1.2 数组的内存分析数组的内存分析栈的特点是变量一旦超出了作用域,该变量就会从内存中消失,同时释放内存空间。堆内存中存储的都是对象数据,一旦不被引用,就可能被当做垃圾回收3.2数组常见的异常1.ArrayIndexOutOfBoundsException索引值(下标)越界例例3.3 索引值越界产生的异常2.NullPointerException空指针异常例例3.3 空指针异常注:注:在后面的章节会详细介绍异常和异常处理在后面的章节会详细介绍异常和异常处理3.3Arrays的使用Array是Java类库中提供的类,用于对数组的各种操作。第第5章章
30、 详细介绍详细介绍Arrays的使用的使用3.4二维数组二维数组可以看成是每个元素是一维数组的数组,定义如下:数组类型数组名=new数组类型数组行数数组列数;或:数组类型数组名;数组名=new数组类型数组行数;数组名0=new数组类型第1行列数;数组名1=new数组类型第2行列数;数组名数组行数-1=new数组类型最后一行列数;3.4二维数组例:inta=newint43;/四行三列的二维数组列:intb=newint2;/两行的二维数组b0=newint3;/第一行3个元素b1=newint5;/第二行5个元素二维数组的长度是数组的行数,如上面数组a长度是3,b的长度数2。二维数组每一行的长
31、度可以不同。例例3.6 二维数组的长度3.4二维数组二维数组的初始化:在创建数组的同时为元素赋值,称为数组的初始化,如:intx=newint0,1,2,1,2,3,4;当然也可以先定义数组,然后再给数组元素赋值,如例例3.7。3.4二维数组例例 用二维数组存储乘法口诀表。publicstaticvoidmain(Stringargs)inta=newint9;for(inti=0;i9;i+)ai=newinti+1;for(intj=0;j=i;j+)aij=(i+1)*(i+1);for(inti=0;i9;i+)for(intj=0;j文本)、解析(文本-日期)和规范化。构造方法:pu
32、blicSimpleDateFormat(Stringpattern)解析:publicDateparse(Stringsource)throwsParseException格式化:publicfinalStringformat(Datedate)标记描述描述Y表示年,年份是四位数字,所以需要使用yyyy表示年。M表示月,月份是两位数字,所以需要使用“MM”表示月。d表示日,日是两位数字,所以需要使用“dd”表示日。H表示时,两位数字表示m表示分,两位数字“mm”s表示秒,两位数字“ss”S表示毫秒,三位数字“SSS”6.6 SimpleDateFormat例例 6.8 SimpleDateF
33、ormat类的格式设置类的格式设置6.7 List接口接口CollectionArrayListSetListLinkedListVector6.7 List接口接口List接口的主要方法:publicEget(intindex)根据索引取得指定的元素内容publicEset(intindex,Eelement)修改指定索引元素的内容PublicListIteratorlistIterator()为ListIterator接口实例化6.7.1 ArrayList类类-数组链表数组链表例例6.9 List的基本使用的基本使用例例6.10输出集合数据输出集合数据例例6.11 List接口中接口中c
34、ontains()、remove()方法的方法的使用使用6.7 List接口接口6.7.2 Vector类类 -向量向量例例6.12 Vector类的类的使用使用6.7.3 LinkList类类-链表链表例例 6.13 ArrayList的添加、删除操作的添加、删除操作第7章 异常处理7.1 Java异常基本概念异常基本概念ObjectErrorExceptionThrowable可抛出的错误异常检查异常(非运行时异常)非检查异常(运行时异常)ClassNotFoundExceptionExceptionDataFormatExceptionIllegalAccessExceptionInte
35、rruptedExceptionIOExceptionRuntimeExceptionArithmeticExceptionSecurityExceptionNullPointerExceptionIllegalArgumentExceptionNumberFormatExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException StringIndexOutOfBoundsException 必须处理可以不处理7.1 Java异常基本概念异常基本概念IOExceptionArithmeticExceptionNullPoint
36、erExceptionIndexOutOfBoundsExceptionClassCastExceptionIllegalArgumentExceptionJava的异常处理:的异常处理:使用trycatchfinally结构处理异常,将程序的业务与异常处理分离,逻辑更清晰。7.1 Java异常基本概念异常基本概念例如下面的代码在运行时,就会产生异常:inta=10;intb=0;Intc=a/b;System.out.println(c);System.out.println(程序结束);运行时产生异常,输出下列信息,程序结束:Exceptioninthreadmainjava.lang.A
37、rithmeticException:/byzeroattest.Test.main(Test.java:71)7.1 Java异常基本概念异常基本概念使用异常处理后的代码如下:tryinta=10;intb=0;intc=a/b;System.out.println(c);catch(ArithmeticExceptione)System.out.println(除数为零,产生异常);System.out.println(程序结束);运行结果如下:除数为零,产生异常程序结束将可能产生异常的代码放在try块中,使用catch捕获异常,一旦抛出异常就会在后面的catch中找到一个匹配的异常,进入
38、catch块。7.2 throw和和throws关键字关键字7.2.1 throw关键字关键字除了程序运行由于各种原因可产生异常,我们也可以主动使用throw关键字抛出一个异常对象。例如例如 7.1 抛出异常抛出异常7.2 throw和和throws关键字关键字7.2.2 throws 关键字关键字如果一个方法中会产生异常,二不想在方法中处理这个异常,可在方法声明时使用throws关键字。表示这个方法会产生异常,要求调用他的方法处理。例例7.2 throws关键字关键字例例7.3主方法中使用主方法中使用throws抛出异常抛出异常7.3 trycatchfinally捕获异常捕获异常7.3.1
39、 try-catch语句语句try语句;/可能产生异常的语句。catch(异常类1变量名)异常处理1catch(异常类2变量名)异常处理2匹配规则匹配规则(1)参数与产生的异常属于一个类;(2)参数是产生的异常的父类;(3)参数是一个接口时,产生的异常实现了这一接口。例例7.4 try-catch异常处理异常处理结构结构7.3 trycatchfinally捕获异常捕获异常7.3.2try-catch-finallytry语句;/可能产生异常的语句。catch(异常类1变量名)异常处理1catch(异常类2变量名)异常处理2finally/执行清除工作的语句.不管有没有异常,finally中的
40、代码总是要执行的。例例7.5 打开一个文件流,读入两个打开一个文件流,读入两个字符串,转化为整数,并求其和。字符串,转化为整数,并求其和。7.3 trycatchfinally捕获异常捕获异常7.3.3 try,catch,finally,throw,throws联合使用联合使用例例7.6 try catch 综合运用综合运用7.4 自定义异常自定义异常自定义异常一般可继承Exception一般只需要写构造方法例例7.7 自定义异常自定义异常第8章图形用户界面8.1AWT组件8.1.1 AWT 组组件件简简介介AWT(AbstractWindowToolkit)是抽象窗口工具包,是第一代的Ja
41、vaGUI组件,绘制依赖于底层的操作系统。AWT组件位于java.awt包中8.1AWT组件例8.1显示框架窗口例8.2显示多个框架窗口8.1.2 Frame组件与组件与Panel组件组件setLocation()setSize()setBackground()setResizable()setVisible()setBounds()8.1AWT组件例8.3在框架窗口(Frame)中显示一个面板(Panel)例8.4在框架窗口(Frame)中显示多个面板。setLayout(null)setBounds()add()8.1.2 Frame组件与组件与Panel组件组件8.1AWT组件可以使用布
42、局管理器管理容器中组件的位置。setLayout()设置布局管理器。8.1.3 布局管理器布局管理器LayoutManageFlowLayoutBorderLayoutGridLayoutGridBagLayoutCardLayout8.1AWT组件8.1.3 布局管理器布局管理器FlowLayoutFlowLayout按着组件添加到容器中的顺序从左到右、从上到下依次排列,因此也称为流式布局例8.5使用FlowLayout在框架窗口(Frame)中显示多个按钮。对齐方式:LEFT(左对齐)RIGHT(右对齐)CENTER(居中对齐)LEADING(与容器方向的开始边对齐)TRAILING(与容
43、器方向的结束边对齐)垂直方向间距水平方向间距8.1AWT组件8.1.3 布局管理器布局管理器BorderLayout布局管理器把容器的布局分为东、西、南、北、中五个区域。例8.6使用BorderLayout在框架窗口(Frame)中显示5个按钮垂直方向间距水平方向间距BorderLayout8.1AWT组件8.1.3 布局管理器布局管理器GridLayout以矩形网格形式对容器的组件进行布置,也称为网格布局管理器。例8.7使用GridLayout在框架窗口(Frame)中显示7个按钮。行数列数垂直方向间距水平方向间距GridLayout8.1AWT组件8.1.4 事件处理事件处理8.1AWT组
44、件8.1.4 事件处理事件处理1.按钮事件处理ActionEven-getActionCommand()getSource()ActionListener-actionPerformed()Button-addActionListener()setActionCommand()例8.8在窗口中放置两个按钮,分别单击两个按钮,输出不同的信息。8.1AWT组件8.1.4 事件处理事件处理2.文本框的事件处理ActionEvenTextEvent-textValueChanged()TextField-getText()setText()setEchoChar()例8.9在窗口中放置一个文本框,当文
45、本框的内容改变时,输出一个内容变化的通知,并显示当前文本框的内容。在文本框中输入文字后按回车键,输出文本框的内容,并将文本框的内容清空。8.1AWT组件8.1.5 适配器适配器1.窗口事件的处理当监听器的方法较多,而程序只用到个别方法时,可以使用适配器。例8.10程序运行后,窗口显示,然后点击右上角关闭按钮,将程序关闭。WindowEvent8.1AWT组件8.1.5 适配器适配器2.键盘事件的处理例8.11编写程序,如果按下字符键时,输出该字符,如果按下非字符键时,输出该键相关的信息。KeyListenerKeyPressed()KeyReleased()KeyTyped()KeyAdapt
46、erKeyEventKeyEventgetKeyChar()getKeyCode()8.2 Graphics类类Graphics类提供基本的几何图形绘制方法,主要有:画线段、画矩形、画椭圆、画圆弧、画多边形等。Graphics是一个抽象类,不可能直接产生实例,JavaAWT组件都有Paint()方法,该方法有Graphics参数。但传入的参数不属于Graphics类,而是其某个子类的一个实例(这个子类就是sun.java2d.SunGraphics2D)。8.2 Graphics类类由于Graphics是一个抽象类,因此我们在程序中不能使用new创建一个Graphics对象,而Componen
47、t类提供了一个paint()方法,该方法的参数就是Graphics对象,可以使用该Graphics对象完成绘图的任务。当组件需要重画时,系统会自动调用paint()方法,因此在paint()方法中画出的图形一直会显示在组件中。例8.12在窗口中输出简单的图形8.2.1 在在paint()方法中方法中绘图绘图8.2 Graphics类类如果程序在组件中绘制了新的图形或修改了图形,有时也需要重新绘制组件,如果调用paint()方法,则需为其准备一个Graphics对象作为方法的参数。这时我们可以调用repaint()方法,让repaint()方法准备参数并调用paint()方法。例8.13在第5章
48、讲过圆类和矩形类,当时还不知道如何将这些图形画出。下面通过在在窗口中通过单击按钮,随机画出圆形或矩形,圆的半径以及矩形的长宽都是随机的,每单击一次画一个图形。8.2.2 repaint()方法方法8.3 Swing组组件界面件界面设计设计Swing的顶层容器有JFrame和JDialog。1JFrame每个JFrame对象都有一个与之关联的内容面板Container类的对象,只能针对这个对象设置布局及添加组件。例8.14在窗口中显示一个按钮,单击按钮退出程序,点击窗口右上角的关闭按钮,也退出程序。getContentPane()setContentPane()setDefaultCloseOp
49、eration(JFrame.EXIT_ON_CLOSE)8.3.1 顶层顶层容器容器8.3 Swing组组件界面件界面设计设计2JDialogJDialog是对话框类。可以通过构造方法指定对话框的所有者(也就是父窗口)对话框的类型对话框的标题。例8.15在窗口中添加两个按钮“打开”和“关闭”,单击“打开”按钮,显示一个对话框(该对话框中包含一个标签组件),单击“关闭”按钮隐藏该对话框。8.3.1 顶层顶层容器容器8.3 Swing组组件界面件界面设计设计中间容器只能放在其他容器中,不能单独存在。JpanelJScrollPaneJTabbedPaneJToolBarJSplitPane例8.
50、16将窗口分割为左右两个部分,中间的分割线可以被拖动以调整两个窗格的大小,可以使用JSplitPane完成这一任务。(Jpanel,JSplitPane)8.3.2 中中间间容器容器8.3 Swing组组件界面件界面设计设计JSplitPanesetOneTouchExpandable(true),分隔条上提供一个小箭头来快速展开或折叠分隔条setContinuousLayout(true),在用户拖动分割线的过程中,子组件将连续地重新显示和布局setOrientation(JSplitPane.HORIZONTAL_SPLIT)将分割线设置为垂直方向,也就是可以在分割线的左右侧各放置一个组件