《JAVA技术教程(基础).pdf》由会员分享,可在线阅读,更多相关《JAVA技术教程(基础).pdf(147页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、J A V A技 术 教 程(基 础 篇)说 明:JAVA语言是随着网络的不断发展而产生的一种计算机高级语言,它具备优越的安全性、可移植性等。阐述过程中,对语言的普遍意义上的内容将不做重点介绍,如JAVA的数据类型、语法等。另外,由于JAVA语言是一种面向对象的,对于面向对象的理论讲解也将不作为重点,而讲述面向对象在JAVA中的实现。对JAVA根据实际的需要,将重点阐述APPLET技术、线程技术,对于AWT、JAVA高级网络技术如JSP、JD B C等内容将作为介绍性内容。第一部分 JAVA程序介绍1、程序类型:Application应用程序和Applet小应用程序i.Application应
2、用程序与C+一样,是完全独立开发和应用的程序(关于JAVA与C及C+的具体区别在后面将做详细介绍)。i i.A ppl et 小应用程序是J A V A 实现与I n t er n et 交互的、能够实现网络特性的应用程序。其必须嵌入H t m l 中实现程序的运行,不能独立运行。2、J A V A 程序结构:J A V A 的程序结构包括四部分:原代码.j a v a ,类文件.cl a s s,文件归档工具j a r 生成的.j a r 和存储对象状态的序列文件.s er原代码J A V A 的文件结构如下:pa ck a ge(0 or 1)im por t (0 or s er v e
3、r a l)/J A V A 默认状态为j a v a.l a n g,ob j ect 包,所以在简单的程序过程中可以不用引入包。pu b l ic cl a s s D efin it ion (0 or 1)cl a s s D efin it ion (0 or s er v er a l)in t er fa ceD efin it ion (0 or s er v er a l)3、程序实例:J a v a 程序的开发过程:1.A ppl ica t ion:应用程序的开发编辑你的程序文件,存为纯文本文件j a v a A pp.j a v a,后缀必须为j a v a(可以通过任
4、意的文本编辑工具写入程序代码,后缀名为 java)例1class javaApp(public static void main(String args)(System.out.println(这 是 我 的 第 一 个 JavaApplication!);)编译成类 class 文件:javac javaApp.java执行程序:java javaApp main方法中的参数同样如C及C+中一样能够传递参数注意:用javac和java编译、执行源、类文件的时javac编译必须带后缀.java;java执行类文件不带.class后缀;文件名大小写必须一致。且文件名必须Application程序
5、入口类(唯一含main方法的类)名称一致。如果Java源文件的文件名不是入口类的名称,编译后产生的类文件依然会是与入口类名相同的名称。上述程序中首先用保留字cl a s s 来声明一个新的类,其类名为j a v a A pp,它是一个公共类(pu b l ic)。整个类定义由大括号 括起来。在该类中定义了一个m a in ()方法,其中pu b l ic表示访问权限,指明所有的类都可以使用这一方法;s t a t ic指明该方法是一个类方法,它可以通过类名直接调用;v oid则指明m a in()方法不返回任何值。对于一个应用程序来说,m a in()方法是必须的,而且必须按照如上的格式来定义
6、。J a v a 解释器在没有生成任何实例的情况下,以m a in()作为入口来执行程序。J a v a 程序中可以定义多个类,每个类中可以定义多个方法,但是最多只能有一个公共类,m a in()方法也只能有一个,作为程序的入口。m a in()方法定义中,括号()中的S t r in g a r gs 是传递给mai n ()方法的参数,参数名为ar g s,它是类S t r i n g的一个实例,参数可以为。个或多个,每个参数用“类名参数名”来指定,多个参数间用逗号分隔。现在我们可以运行该程序。首先把它放到一个名为j av aA p p.j av a的文件中,这里,文件名应和类名相同,因为
7、 J av a解释器要求公共类必须放在与其同名的文件中。然后对它进行编译:C:编译器路径 j av ac J av aA p p.j av a编译的结果是生成字节码文件j av aA p p.c las s o最后用j av a解释器来运行该字节码文件:C:java javaApp2.Applet:小应用程序的开发同上,也需要编译为class文件,源文件javaApplet.java如下:例2:import java.awt.*;public class javaApplet extends java.applet.Applet(public void paint(Graphics g)(g.
8、drawString(这 是 我 的 第 一 个JavaApplet!,40,20);)生成HTML文件first.html,含上面的java类:下面的文字是用Java输出的!用浏览器或java的浏览器运行:appletviewer first.html注意:a)在 Html嵌入的是Java原程序经过编译后生成的Class文件;b)H tm l中 applet标记含有很多参数针对如何调用applet,其 中 重 要 的 有:code=(applet文件名),codebase=(代码基址,是包含着applet代码的目录。在没有给出时,默认为当前html文档的地址)、。例 2 这是一个简单的App
9、let(小应用程序)。程序中,首先用import语句输入java,awt下所有的包,使得该程序可能使用这些包中所定义的类,它类似于C中的#include语句。然后声明一个公共类javaA pplet,用extends指明它是Applet的子类。在类中,我们重写父类Applet的paint()方法,其中参数g 为Graphics类,它表明当前作画的上下文。在 p a in t()方法中,调用g的方法drawString(),在坐标处输出字符串“这是我的第一个Java Applet!”,其中坐标是用象素点来表示的。这个程序中没有实现main()方法,这是Applet与应用程序Application
10、(如例1)的区别之一。为了运行该程序,首先我们也要把它放在文件javaApplet.java中,然后对它进行编译:C:javac javaApplet.java得到字节码文件javaApplet.class。由于Applet中没有 main()方法作为Java解释器的入口,我们必须编写HTML文件,把该Applet嵌入其中,然后用appletviewer来运行,或在支持Java的浏览器上运行。它的文件如下:A n A p p l e t 其中用 Applet)标记来启动javaApplet,code指明字节码所在的文件,width和 height指明applet所占的大小,我们把这个HTML文
11、件存入Example.html,然后运行:C:ap p le t v i e w e r E x amp le,h t ml从上述例子中可以看出,Java程序是由类构成的,对于一个应用程序来说,必须有一个类中定义main()方法,而 对applet来说,它必须作为Applet一个子类。在类的定义中,应包含类变量的声明和类中方法的实现。Java在基本数据类型、运算符、表达式、控制语句等方面与C、C+基本上是相同的,但它同时也增加了一些新的内容,在以后的各章中,会详细介绍。本节中,只是使大家对Java程序有一个初步的了解。3、Applet 和 Application 的混合程序:Java类文件有可
12、能既是一个java application又 是javaappleto虽然这样的java文件比较复杂,但是它却既可以在浏览器中运行,又可以单独运行。实例:例3:import java.applet.Applet;import java.awt.*;import java.awt.event.*;public class Appletapp extends Applet public static void main(String args)Frame frame=new Frame(Application);/创建一个Frame对象作为装载Applet的环境Appletapp app=new
13、AppletappO;frame.add(center,app);frame.setS ize(200,200);frame.validate();frame,add WindowListener(newWindowControl(app);app.init();app.start();)public void paint(Graphics g)g.drawString(hello applet application,25,25);)public void destroy()System.exit(O);)class WindowControl extends WindowAdapterAp
14、plet c;public WindowControl(Applet c)this.c=c;)public void windowClosing(WindowEvent e)c.destroy();)4、Java程序开发平台的介绍:开发Java程序一般使用的平台主要有:JDK、Jbuild、VJ+等。其中主要介绍JDK、Jbuild。二、面向对象程序设计关于JAVA中面向对象的程序设计概念,由于在 面向对象程序设计和 C+实践中,已经进行了详细的解释。所以,在此关于JAVA中面向对象的知识将重点介绍以下内容,其余部分将在具体程序事例中讲述。1、接口:a)接口产生的意义:由于JAVA只允许单重继
15、承性,即每个Java中的类只能有一个父类(但一个父类可以有多个子类)。多重继承增加了编程的复杂性,但提高了编程的功能。Java为了弥补由于单继承性而带来程序功能降低的缺陷,特别是在我们创建的类的行为在类层次的不同分支中已有定义的情况,就提出接口的概念。在某种程度上,接口具有这类的特性。b)接口的定义:接口就是一种没有完全实现的类,包含抽象的方法和常量定义。接口中不能有方法实现的具体代码。接口就是抽象的类。定义接口使用interface关键字。eg.interface Printable void print();)class Mouse implements Printable void pr
16、int()System.out.println(Mouse);)class Duck implements Printable void print()System.out.println(“Duck);)c)接口的使用:i.接口的定义和类相似,在很多地方它们同样进行处理,它们定义在同一个文件中。不同的是接口不需要通过new来创建它的实体。ii.接口也是可以相互继承的。如:interface A extends B iii.一个类同时可以实现多个接口。如:class class_A interface A_inteface,B_interface.)i v.在类实现了某个接口后就必须在类中对该
17、接口的抽象方法具体化即给抽象方法写具体代码。v.接口可以实现多重继承,既可以通过extends将多个接口组合成一个接口。但接口不能通过implements实现其它接口。vi.java类库中也提供了很多接口,Runnable就是其中一个。(具体可查阅相关资料或开发平台中的帮助,线程的定义和实现中就是通过某个类实现Runnable接口的)2、包:a)包产生的意义:i.包的使用可以实现一组类和接口的封装,这也正是面向对象的思想。ii.由于java编译器以入口类名为文件名生成源文件,这在一定程度上会造成同名类的冲突,通过包可以使在其后定义的所有类集合在一起,使在不同包中的入口类名相同。b)包的定义:p
18、ackage关键字定义包。如:package First_package;publi class Myclass)class yourclass c)包的引用:i.一个源文件最多只能有一个包定义,如果有包定义必须出现在文件的最前头。ii.包的引用通过关键子importo但 对java.lang包(最基本的语言处理类)不需要import。如,String类就是lang包中的类。iii.包与类相似也是有层次的。如,java类库中顶层是jav a,下一层有awt、io、net等。这些包又有下一层,如在aw t包中还有image、peer、test等。在引用这些包时通过.来实现其层次性。如要引用ima
19、ge包,格式为:java.awt.image。另外,如在程序中需要用到某个包中许多子包的类时则可以通过*来实现多个包的引用。如 java.awt.*则表示可以引用aw t包中子包的类。但通过*来引用包并没有引用包中其他包的public类,如要引用java.awt.image包中的ImageFilter类则必须单独使用import语句。如:import java.awt.*;import java.awt.image.*;或 者 importjava.awt.image.ImageFilter;也可以在程序中引用一个类的时候加上包名,这样不需要使用 import 语句:java.awt.imag
20、e.ImageFilter imf;如果一个程序中引用了多个包,而且有两个及更多的包中有相同的方法,则必须在具体用到该方法时必须指明该方法所属的包。iv、java中提供的基本包类。java.lang最基本的语言处理类;java.io 实现输入输出 java.util;包含一些如特殊类;用于实现网络连接,与java.io合用实现对网络文档的读写; java.applet 用于创建可在支持jav a的浏览器中运行的 java Applet;java.awt 可创建平台独立的图形用户接口(GUI)程序3、内 部 类(Inner Class):a)内部类产生的意义:Java中不允许实现类的多重继承,但
21、当一个类需要实现多个类中方法时,我们可以选择通过实现接口来达到这样的目的。但在实现接口时必须实现该接口中所有的方法,这样有时会很烦琐,故此Java中就增加了一个新的概念:内部类(Inner Class)。在JDK1.1版以后就支持了内部类(Inner Class)o比如:在用到AWT编程过程中,在需要处理多个事件时(如鼠标的点击事件就有左、右、中等几种方法)就需要一个类能够使用多个事件适配器类的方法,根据Java中不能实现多重继承的特性,只能实现这些事件的监听器接口,但接口又要求必须实现其中所有的方法,这样又很烦琐。b)内部类的定义:内部类就是嵌套在类中的类。c)内部类的特性:i.Inner
22、Class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。Inner Class名字不能与包含它的类名相同。ii.Inner Class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量。iii.Inner Class 可以定义为 Abstract 的。iv.Inner Class 可以声明为 private 或 protectedov.Inner Class若声明为static,就变成了顶层类,就不能使用局部变量。vi.Inner Class中的成员不能声明为static,只有在顶层类中才能 声 明 static成员。如果想在Inner Class中声
23、明任何static成员,则该Inner Class必须声明为static。v i i.建立内部类的对象:1、在外部类的实例成员方法中可以直接建立内部类的对象,不能在类方法中建立。2、在 外 部 类 的 类(static)成员方法中,以及与外部类并行的其他类中的方法中,建立内部类对象必须与外部类关联。outer.innerv i i i.内部类的使用周期;内部类定义在一个具体的语句块中,内部类只能在该语句块的生命周期内存取该语句块中的局部变量。d)事例:import java.awt.*;import java.awt.event.*;public class TwoListenInnerpri
24、vate Frame;private TextField tf;public static void mian(String args)TwoLisenlnner that=new TwoLisenInner();That.goQ;)public void go()f=new Frame(t4TwoListener example);f.add(North”,new Label(uClick and drag the mouse);tf=new TextField(30);f.addMouseMotionListener(new MouseMotionHandler();f.addMouseL
25、istener(new MouseEventHandler();f.setSize(3OO,3OO);f.setVisible(true);)public class MouseMotionHandler extends MouseMotionAdapterpublic void mouseDragged(MouseEvent e)String s=Mouse dragging:X=+e.getX0+“Y=+e,getY();tf.setText(s);)public class MouseEventHandler extends MouseAdapter public void mouseE
26、ntered(MouseEvent e)String s=the mouse Entered;tf.setText(s);)public void mouseExited(MouseEvent e)String s=the mouse has left the building;tf.setText(s);)e)与内部类相关的概念还有内部接口和内部抽象类,其使用和概念与内部类几乎一致,在此不赘述!4、Java与C/C+的比较:Java使用了类似于C/C+的语法,而去除了 C/C+的许多不合理的内容,以实现其简单、鲁棒、安全性等特性。a)全局变量Java中不能定义全局变量,只能通过类中的公用、静
27、态的变量实现全局变量。这样便保证了更好的安全性,全局变量被封装在类中。而C/C+中,依赖于不加封装的全局变量常造成系统的崩溃。(在引用类中私有变量和公用变量时,造成变量名称的混乱,从而造成系统内存的错误)b)无条件转移指令与C/C+不同,Java不支持goto语句,而通过例外处理语句try、catch、final等来代替C/C+中的goto语句,以处理遇到错误跳转的情况,使程序更加结构化提高了程序的可读性。c)指针指针是C/C+中最灵活,但也是最容易出错的数据类型。以指针进行内存操作常造成不可预知的错误。而且,通过指针对内存进行显示类型转换后,可以访问类的私有变量,破坏了安全性。Java中,程
28、序员不能进行任何指针操作,同 时 一,数组在java中用类来实现很好地解决了数组越界这个C/C+中不作检查的错误。d)内存管理C中,程序员使用库函数malloc()和free()来分配和释放内存,C+中则是运算符new和delete。再次释放已释放的内存块或释放未分配的内存块,会造成系统的崩溃,而忘记释放不再使用的内存块也会逐渐耗尽系统资源。在Java中,所有的数据结构都是对象,通过运算符new分配内存并得到对象的使用权,而实际上分配给对象的内存可随程序运行而改变。Java自动进行管理并进行自动垃圾收集。有效的防止了因程序员误操作而造成的错误,并更好的利用了系统资源。e)数据类型的一致性在C/
29、C+中,不同平台上,编译器对简单的数据类型如in t、float等分别分配了不同的字节数。例如,int在IBM PC上为16位,在 VAX1上为32位,因此导致了代码的不可一移植。而 在 Java中,对某种数据类型总是分配固定的位数,这就保证了 Java的平台无关性和可移植性。f)类型转换在 C/C+中,可以通过指针进行任意的类型转换,导致不安全的可能性存在。在 Java中,系统要对对象的处理进行相容性的检查,防止不安全的转换。g)头文件在 C/C+中使用头文件声明类的原型和全局变量及库函数等。大的系统中,维护这些头文件非常困难。Java不支持头文件,类成员的类型和访问权限封装在一个类中,运行
30、时系统对此访问进行控制。防止对私有成员的操作。另外,Java中用import语句与其他类进行通信,以使用他们的方法。h)结构和联合C/C+中的结构和联合的成员均为公有,带来了安全性的问题。Java不支持结构和联合,所有内容封装在类中。i)预处理C/C+中用宏定义实现的代码影响了程序的可读性。Java不支持宏,以关键字final声明常量。第八章异常处理1、概念的产生:在C/C+这样的语言中,对运行时间错误的处理可以有多种形式,比如访问了一个无效指针,系统要么退出程序,告诉你一个错误信息,要么系统死机。如果用函数处理所发生的错误,必须有一个特定的返回值来通知函数调用者错误的发生,或使用输出变量来辨
31、认错误。总之,整个对错误的处理不一致。为了能够有效处理程序运行错误,就必须建立统一的机制来捕捉、处理异常。JAVA采用的面向对象方法处理异常则解决了这个问题。2、Java例外(异常):eg 8.1import java.io.*;class ExceptionDemo 1 public static void main(String args)FilelnputStream fis=new FileInputStream(text);int b;while(b=fis.read()!=-1)System.out.print(b);)fis.close();此事例进行编译时系统将报错。(具体报错
32、参看编译显示)eg 8.2class ExceptionDemo2 public static void main(String args)int a=0;System.out.printin(5/a);)此事例编译时没有报任何错误,但在执行时报错。上面所举之两个实例,我们所遇到的所谓报错就是Java中所提的异常(例外)。编译、运行时所报的错误信息显示的内容java.io.FileNotFoundExceptionJava.io.IOException 以 及java.lang.ArithmeticException分别指明了例外的类型。其概念也正如类的概念。同时,从实例8.1和 8.2报出例
33、外的过程可以看出,有些例外在程序中必须处理,否则编译都不通过(eg8.1)o而有些例外在程序中可以不做处理,而直接由系统运行时系统来处理(eg8.2)。由此,则引出了我们下面将要讨论的例外的处理问题。3、例外的处理机制:在 Java程序如果在运行中出现了例外就会生成一个例外对象。这个对象可能是由正在运行的方法生成,也可能是Java虚拟机生成,其中包括一些信息指明例外事件的类型以及当例外发生时程序的运行状态等。生成的例外对象将传递给Java运行时系统,这一例外的产生和提交的过程称为抛弃(throw)例外。当Java运行时系统得到这个例外对象时,将会寻找处理这个例外的代码。寻找按照方法的调用栈逐层
34、上升。这个过程称为捕获(catch)例外。如果捕获不到则程序停止。如 8.2。4、例外类的层次由于Java处理例外采用了面向对象的思想,则整个例外自然包含了层次性。这里Java将所有例外类对应于类Throwable及其子类。具体层次结构见下图:从上面的图我们看出,Java中的异常事件分为两类。一类继承于 类 Error,通常这种例外程序是不应该捕获的例外,也不抛弃这种例外。另外一类继承Exception的例外则是需要大量处理的例外。在 Exception类下面的子类中,继承于RuntimeException的类代表 了 程 序 运 行 时 生 成 的 例 外。如eg 8.2 中 产 生 的Ar
35、ithmeticException 这种例外比较普遍而且系统自身就能够处理,所以不用程序员去用代码处理。而其它继承于Exception的子类则代表非运行是例外。如eg8.1。这种例外程序必须处理。下面我们将要讨论的例外处理就是针对这部分例外而进行的。5、例外处理:异常的处理可以有以下儿种:对运行时异常可以不做处理;使用 try-catch-finally语句捕获异常;通过throws子句声明异常,还可以定义自己的异常类,并用他throw语句抛出它。其中,try-catch-finally语句其语法为:try.可能产生例外的代码段 catch(ExceptionName 1 e).捕获异常 ca
36、tch(ExceptionName2 e).捕获异常finally.不管是否有异常必须执行的代码段,一般是处理一些善后事情)另外,如果在一个方法中生成一个例外,但是这个方法并不确切知道该如何对这个例外进行处理,此时一般就由调用它的这个方法来处理。这时一个方法就得声明抛弃例外使得例外对象可以从调用栈向后传播,直到被捕获。声明抛弃例外是在一个方法声明中的throws子句来指明并由合适的程序代码来处理,当然也可以不处理。但是,对于非运行状态的例外必须处理:例如:public int read()throws IOException)同 时 一,我们在捕获一个例外前,例外都是通过throw语句抛出的。
37、只是抛弃例外可以是自己写的Java代码、JDK中的某个类或者是Java运行时的系统。一般如果我们自己定义例外,则需要自己写代码将此例外抛出供程序捕获。注意:用 throw语句抛出例外首先要生成例外对象,并且该例外必须是throwable类或子类。例如:lOException e=new IOException();生成例外对象throw e;throw new String(want to throw)由于 String 并不是throwable或子类,所以该错误。eg8.3import java.io.*;class ExceptionDemopublic static void main(
38、String args)throws lOException通过throws语句抛弃lOException例外FilelnputStream fis=null;try 可能产生例外的代码段System.out.println(first arguments+argsO);fis=new FileInputStream(text);System.out.println(content of text is:);int b;while(b=fis.read()!=-1)System.out.println(char)b);)catch(FileNotFoundException e)捕获例外Sys
39、tem.out.println(e);catch(lOException e)System.out.println(e);catch(IndexOutOfBoundsException e)System.out.println(e);finally /必须执行的代码段if(fis!=null)System.out.println(closing FilelnputStream,fis.close();elseSystem.out.println(FileInputStream not open);注意:1)在 try语句中产生例外对象后,系统会将该例外对象沿调用栈向上寻找相匹配(是指参数类型与
40、例外对象的类型完全相同或者为其父类)的 catch语句。所以,捕获例外的顺序是和不同catch语句的顺序有关了。因此,在安排catch语句 顺 序 时 必 须 是 从 特 殊 到 一 般。(如 上 例 中,FileNotFoundException 是 lOException 的子类)(在下面的例子中,如果调换两个catch语句的顺序则编译报错)import java.io.*;public class Quizl public static void main(String arg)int i;System.out.print(GO);try(System.out.print(in);i=S
41、ystem.in.read();if(i=0)throw new MyException();System.out.print(this);)catch(IOException e)catch(MyException e)System.out.print(that);)System.out.print(way.n);)class MyException extends Exception 运行该程序后输入字符O,请问运行结果为何?(A)Go in this way(B)Go in that this way(C)Go in that(D)Go in that way第十二、十三章图形用户界面通
42、过GUI(Graphical User Interface),用户和程序可以友好地进行交互。Java中的AWT和 Swing就包含了很多的类来支持GUI的设计。AWT的主要功能:用户界面组件、事件处理模型、图形和图象工具、布局管理器等。1、生成Java图形用户界面根据 课本图12.2所示,在 java.lang.object包之下有很多实现图形用户界面的包和类,其中,Component类为java.awt包中最核心的部分。它是构成Java图形用户界面的基础,其他所有组件都是由这个类派生出来的。Component类是个抽象类(说明?),不能直接使用。在 Component类中,定义了 AWT组件
43、所具有的一般功能(说明?)o1)基本的绘画支持方法repaint。、paint。、update。等用来在屏幕上绘制组件。组件的绘制过程是不能被中断的,AWT绘图系统通过一个单独的线程来控制程序何时进行组件的绘制。程序中也可以通过调用repaint。来实现绘画,方法repaint。首先调用update()进行背景清除,然 后 由 update。调 用 paint。进行绘图。(在Applet的动画程序体现)2)外形控制(字体getFont。,颜色getColorModel等)3)大小和位置控制组件大小和位置主要取决组件所处的容器的布局管理器,但组件本身也能够有自己的方法实现大小、位置的控制。set
44、Size()setLocation。等4)图象处理类 Component实 现 接 口 ImageObserver,其 中 方 法imageUpdate。用来图象跟踪。5)组件状态控制可用 setEnable()可视 set Visible。、is Visible。返回组件状态等。6)Container类的功能:i.组 件 管 理:add。添 加 组 件、remove。删除组件countComponent()用来统计容器内组件的个数,getComponent。获得某个组件,paintComponents。绘制容器内所有组件。ii.布局管理:每个容器都和一个布局管理器关联。容器通过setLayo
45、ut。设置某种布局。2、容器与组件:常见的组件类:button、Label等,常用的容器有Frame Panel、Applet 等 oJava的图形用户界面最基本的部分是组件,组件是以图形化方式显示在屏幕上,并能够与用户交互。组件不能对显示,必须将组件放在一定的容器中才能显示。容器实际就是Component的子类,所以,容器本身也是个组件。在容器中放置组件安排其位置和大小,必须注意:1)容器中布局管理器负责组件的大小和位置,用户无法在有直接通过程序的方法setLocation()setSize。等来改变,这样都会被布局管理器覆盖。2)如果用户一定要改变,则必须首先将布局管理器取消setLayo
46、ut(null)o随后通过组件方法改变。但这样做的结果是程序的系统相关。java.awt中提供的常用容器中:1)Frame(框架)类是Window类的子类,它是窗口的一种,有自己的标题,其缺省布局管理器为BordeLayout,在一个程序中我们可以使用多个Frameo注意:一个 Frame刚被创建后,其初始大小为(0,0)而且是不可见的,所以必须重设其大小,并且用setVisible(true)设置其为可见。2)Panel(画板)无法独立显示,必须添加到某个容器中。Panel缺省的布局管理器为FlowLayouto例:import java.awt.*;public class Exgui p
47、rivate Frame f;private Panel p;private Button bw,bc,be;private Button bfile,bhelp;public static void main(String args)Exgui gui=new Exgui();gui.go();)public void go()f=new Frame(GUI exameple);bw=new Button(WEST);bc=new Button(Work space region);be=new Button(Exit);f.add(bw,West);f.add(bc,Center);p=n
48、ew Panel();f.add(p,North);bfile=new Button(File);bhelp=new Button(help);p.add(bfile);p.add(bhelp);f.pack。;/将Frame设置为紧凑格式f.setVisible(true);3、AWT的事件处理AWT编程的思想就是通过各种各样的组件实现G U I,并且能够实现和用户的交互。整个实现的过程充分体现的是面向对象的思想。然而,整个用户交互的过程就是用户触发事件,事件就是发生在用户界面上的用户交互行为所产生的一种效果。JDK1.1中的AWT处理事件由原来JDK1.0的事件传递改为事件授权模型,即事件
49、处理从一个事件源授权到一个或多个事件 监 听 器,组 件 作 为 事 件 源 可 以 触 发 事 件,通过addXXXListener方法向组件注册监听器,一个组件可以注册多个监听器,如果组件触发了相应的事件,此事件就被传送以注册的监听器,事件监听器负责处理事件过程。ActionEventFrameactionPerformed(ActionEvent)监听器对象使用授权处理模型进行事件处理的实现原理:(见课本P294)在A W T中的事件共10类(课本P295),其 中ActionEventItemEvent AdjustementEvent TextEvent 为高级事件,其余为低级事件。
50、高级事件封装了 GUI组件的语义模式,他们没有同任何屏幕基础的组件相连,而是与具有一定语义的事件相连。如ActionEvent能在按钮按下时被激活,也能在用户在TextField组件敲回车时被激活。所以高级事件又叫语义事件。4、Sw ing和AWT的区别:Swing是AW T的发展,它具备了许多AWT所不具备的功能,如可以显示图标等。在具体的使用过程中一般没有什么特别强调,通常都用Swingo5、AWT和Swing的区别例:import javax.swing.*;public class swing 1 public static void main(String args)JFrame f