410 likes | 591 Views
第 11 章 实 训. 实训 1 开发工具和运行环境 实训 2 基本数据类型、运算符 实训 3 Java 控制结构 实训 4 方法的定义和调用 实训 5 对象的创建与使用 实训 6 类的组织 —— 包 实训 7 数组及命令行参数 实训 8 类的继承 实训 9 重载和覆盖. 实训 10 接口的实现 实训 11 String 类和 StringBuffer 类 实训 12 Math 类 实训 13 异常处理 实训 14 文件属性的访问 实训 15 文本文件的读写 实训 16 随机文件的读写
E N D
第11章 实 训 • 实训1 开发工具和运行环境 • 实训2 基本数据类型、运算符 • 实训3 Java控制结构 • 实训4 方法的定义和调用 • 实训5 对象的创建与使用 • 实训6 类的组织——包 • 实训7 数组及命令行参数 • 实训8 类的继承 • 实训9 重载和覆盖
实训10 接口的实现 • 实训11 String类和StringBuffer类 • 实训12 Math类 • 实训13 异常处理 • 实训14 文件属性的访问 • 实训15 文本文件的读写 • 实训16 随机文件的读写 • 实训17 Java Applet • 实训18 图形用户界面(—) • 实训19 图形用户界面(二)
实训1 开发工具和运行环境 • 实训目的 • 设置环境变量。 • 掌握Java程序编写、编译、运行的过程。 • 熟练使用Java开发工具JDK。 • 了解print( ) 及println( )方法。 • 实训内容 • 首先设置环境变量,然后编写一个类似HelloWorld的程序。第一次运行时,该程序的输出是:Hello加上你的名字,例如“Hello 李明”。第二次运行时,在“Hello”和“名字”之间换行。
实训1简要提示 • 设置的环境变量主要是path变量,将其设置为Java的安装目录即可,但不同的操作系统的设置的方法不同,读者可根据自己的机器环境进行设置。 • 程序的主体是main()方法。第一次编写时,将姓名作为print( ) 语句的参数即可。为了实现换行,在第二次编写时,需要使用println( )语句或者使用带有转义字符\n的print( ) 语句。 • 每一次对程序的更改,都需要使用Java的编译器javac重新编译,再用解释器java运行。
实训2 基本数据类型、运算符 • 实训目的 • 进一步理解Java 的基本数据类型,掌握语法基础。 • 掌握Java运算符。 • 实训内容 • 编写程序,输出字符'你'、'ぁ'的Unicode编码;编写程序输出Unicode编码为20328和12358所代表的字符。 • 简要提示 • 定义两个字符变量,分别保存字符'你'、'ぁ'。 • 利用强制转换打印出字符Unicode编码。 • 要察看某一合法Unicode编码所代表的字符只需要字符强转换。
实训3 Java控制结构 • 实训目的 • 条件语句。 • 循环语句。 • 跳转语句。 • 实训内容 • 编写一个程序,用于将两个整数值和一个运算符(限定为+、-、*、/ 四种运算)存储在相应的变量中,并执行必要的运算。 • 编写一个程序,求50以内奇数和以及50以内的素数。
实训3简要提示 • 定义两个整型变量和一个字符型变量用来存储两个操作数和运算符 • 使用switch语句执行必要的运算,并输出结果。 • 素数是只能被1和它本身整除的整数。 • 数的产生由for循环控制,注意break语句和continue语句的使用。
实训4 方法的定义和调用 • 实训目的 • 掌握简单的方法定义和调用。 • 了解方法中的参数传递。 • 学习使用递归方法。 • 实训内容 • 编写一个程序,求斐波那契数列第10项。 • 简要提示 • 斐波那契数列的第一项和第二项是1,后面每一项是前两项之和。 • 使用递归方法完成。
实训5 对象的创建与使用 • 实训目的 • 类的创建及其成员定义。 • 对象的创建及使用。 • 构造函数的使用。 • 实训内容 • 创建Computer类用于描述计算机的属性及操作。类中应该有表示计算机基本组成部件(如品牌、颜色、CPU型号、内存容量、硬盘容量等)的成员,也有表示计算机价格、工作状态的成员,并可以对这些成员进行设置和输出。 • 用构造函数实现“组装”一台计算机。可以对计算机进行开机、关机、待机等操作,并用计算机的状态属性表明。
实训5简要提示 • 在Computer类中设计若干成员变量,表示计算机的基本属性。 • 定义setcomputer()方法对成员变量进行设置。设计printcomputer()方法用于这些成员变量的输出。 • 为Computer类设计构造函数,以便于创建对象。构造函数可以传入参数,以便对计算机的属性进行设置,也应该创建空参数的构造函数。 • Computer类中还应该设计pc_open()、pc_close()等方法,用于对计算机进行开、关等操作。这些方法改变表示计算机工作状态发成员变量。 • 使用Computer类创建具体的对象Mycomputer,可以创建一个,也可以创建多个,用于测试上面定义的方法。
实训6 类的组织——包 • 实训目的 • 通过本次实训,主要学习 • 包的创建及使用。 • 类及其成员的访问权限。 • 类路径变量的使用。 • 实训内容 • 创建类Factorial实现求阶乘,并放入自己的包mypackage.factorial中。在另一个包mypackage.test中定义TestFactorial类,测试能否实现计算阶乘的功能。
实训6简要提示 • 计算阶乘要区分正数、负数或零,所以求阶乘时必须分各种情况。 • 两个类分别放入不同的包中,编译时需要注意加上—d参数,以便自动生成定义的包。 • 运行时需要注意用类的全限定名,而不能使用类的短名。 • 要注意改变类路径变量,以便程序可以正确运行,加深对java包的理解。
实训7 数组及命令行参数 • 实训目的 • 数组的创建及其遍历。 • 使用对象数组。 • 命令行参数的传递及使用。 • 实训内容 • 现有职工类Employee,其代码如下: • class Employee{ • String name; • int number; • int age; • int salary; • public Employee(String name,int number,int age,int salary){ • this.name=name; • this.number=number; • this.age=age; • this.salary=salary;}}
其中的四个变量分别表明职工的姓名、编号、年龄、薪水。要求编写类EmployeeTest,在类中使用数组存储若干职工的信息,并有方法分别计算职工年龄、薪水的最大值、最小值和平均值。其中的四个变量分别表明职工的姓名、编号、年龄、薪水。要求编写类EmployeeTest,在类中使用数组存储若干职工的信息,并有方法分别计算职工年龄、薪水的最大值、最小值和平均值。 • 程序运行时在命令行中输入两个参数,根据参数返回职工年龄或薪水的信息。第一个参数若是age表明计算年龄信息,若是salary表明计算薪水信息。第二个参数若是avg表明计算平均值,若是min表明计算最小值,若是max表明计算最大值。 • 例如若输入以下信息,则表明求职工年龄的平均值: • java Employee age avg • 若输入以下信息,则表明求职工薪水的最大值: • java Employee salary max • 其他输入都显示输入错误。
实训7简要提示 • 程序中创建Employee数组存储Employee对象,创建方法对该数组变量进行操作,主要的操作是利用循环进行数组的遍历。 • 数组中每一个变量都是一个Employee对象,都可以使用成员运算符“.”调用成员变量并进行比较或运算。 • 程序的main()方法中进行参数的判断,首先要判断是否为两个参数,然后判断两个参数分别是什么。根据参数的不同,调用不同的方法。 • 进行字符串比较时,使用String类的equals方法或equalsIgnoreCase方法。 • s1.equals(s2) ----- 如果字符串s1等于s2,返回true,否则为false。 • s1. equalsIgnoreCase (s2) ----- 如果字符串s1等于s2,返回true,否则为false,忽略大小写。
实训8 类的继承 • 实训目的 • 了解Java继承基础知识。 • 学会使用Java实现继承。 • 掌握Java继承的应用。 • 实验内容 • 编写一个程序,首先创建一个员工类(employee),包含若干的成员。然后使用关键字extends另外创建“老板”类(manager),说明Java类的继承的关系。 • 编写一个小程序,在超类中定义一个以上的访问权限为private的成员变量和方法,以及访问权限为非private的方法。创建子类,试图访问超的这些成员,并解释所产生的现象。 • 编写一个程序,调用超类的构造函数来创建一个子类对象。子类能继承超类的构造函数吗?
实训8简要提示 • 继承基础。Java通过允许在一个类的声明中加入另一个类来实现继承,这需要使用关键字extends。这样,子类就添加到(扩展)了超类。可以格式化的表示为: • class Employee • { • //类体 • } • class Manager extends Employee • { • //类体 • } • 注意要点:通过继承实现代码复用。根类: java.lang.Object。父类包括直接或者间接被继承的类。Java不支持多重继承。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量 • 构造函数的继承:在层次结构中,超类和子类都可以有自己的构造函数。这就产生了一个重要的问题:哪一个构造函数——是子类构造函数、超类构造函数,还是两者负责创建子类的对象。事实上,超类的构造函数构造对象的超类部分,而子类的构造函数构造子类部分。
实训9 重载和覆盖 • 实训目的 • 了解Java静态多态性。 • 学会使用Java方法重载和方法覆盖。 • 掌握Java方法的重载和覆盖的应用。 • 实验内容 • 编写一程序,要求创建一个类,类体包含有void receive(int i)、 void receive(int x, int y) 、void receive(double d)、void receive(String s)等方法,另外创建一个类文件调用该类里的方法,从而实现重载方法。 • 编写一个程序,要求创建一个类,类体提供两个以上的自定义构造器,复制其中一个构造函数的某方面效果到另一个构造函数中,并在程序主入口处调用构造器来创建不同的对象实例。 • 编写一个程序,创建SuperClass,在这个类里建立一个终态方法,另创建一个类SubClass继承于SuperClass类,在该类中创建一个方法去覆盖超类的终态方法,然后试图调用该终态方法,并对所产生的现象作出解释。
实训9简要提示 • 方法重载的实现方法,可如下所示使用格式: • public void println(int i) • public void println(float f) • public void println() • 注意要点:参数表必须不同,返回类型可以不同。当写代码来调用这些方法中的一种方法时,根据提供的参数的类型选择合适的一种方法。 • 有两个规则适用于重载方法:(1)调用语句的参数表必须有足够的不同,以至于允许区分出正确的方法被调用。正常的拓展晋升(如,单精度类型float到双精度类型double)可能被应用,但是这样会导致在某些条件下的混淆。(2)方法的返回类型可以各不相同,但它不足以使返回类型变成唯一的差异。重载方法的参数表必须不同。 • 构造函数的重载:一个类可以有多个构造器,构造器可以重载。重载经常用于构造方法,构造方法具有和类名相同的名称,而且不返回任何数据类型。如果有一个类带有几个构造函数,那么也许会想复制其中一个构造函数的某方面效果到另一个构造函数中。可以通过使用关键字this作为一个方法调用来达到这个目的。 • 方法覆盖:方法覆盖对象多态性的表现,方法覆盖主要是如何实现,如何应用方法覆盖。子类的对象方法与对象超类的方法:方法名相同,参数表相同,返回类型相同。 • 方法覆盖的规则:不能抛出更多异常,不能指定更弱的访问权限,虽然静态方法不能覆盖,但是也必须遵循同样的规则。
实训10 接口的实现 • 实训目的 • 了解接口的定义和接口的实现。 • 实验内容 • 编写一个程序,定义两个接口,接口可以不书写代码,另外定义两个接口实现单继承和多继承。 • 定义一个接口Volume,其中包含一个计算体积的抽象方法calculateVolume(),然后设计Circle和Rectangle两个类都实现接口的方法calculateVolume(),分别计算球体和长方形的体积。
实训10简要提示 • 接口是一种专门的类型,用interface关键字定义。接口中只能定义抽象方法,不能有方法体,一定是public修饰的。接口中可以定义变量,但实际上是static final修饰的常量。接口中不能定义静态方法。 • 接口的定义包括接口声明和接口体两部分,接口声明中还可以包括对接口访问权限以及父类接口列表,完整的接口声明如下: • [public] interface interfaceName [extends superinterface ] • { • //接口体 • } • 类与接口的关系是实现,关键字implements。实现关系是一种一般化关系。为了使用接口,你要编写实现接口的类。 • 类实现接口时,必须以public修饰的方法方能覆盖接口中的方法。在非抽象类中必须将要实现的接口中所有的抽象方法都要进行覆盖。类实现接口后,可自动获得接口中定义的常量。当实现多个接口,且这些接口中有名字冲突的常量,则不能直接应用冲突的常量名。
一个类要实现某个或某几个接口时,有如下的步骤和注意事项:一个类要实现某个或某几个接口时,有如下的步骤和注意事项: • (1)类的声明部分,用implements关键字声明该类将要实现哪些接口。 • (2)接口的抽象方法,其访问限制符都已指定是public,所以类在实现方法时,必须显式地使用public修饰符,否则将被警告缩小了接口中定义的方法的访问控制范围。 • (3)接口体的声明是定义接口的重要部分,接口体由两部分组成,一部分是对接口中属性的声明,另一部分是对接口中方法的声明。
实训11 String类和StringBuffer类 • 实训目的 • 掌握String中的常用方法 • 掌握StringBuffer中的常用方法 • 实训内容 • 编写一个应用程序,判断两个字符串是否相同,并进一步按字典顺序比较字符串的大小。 • 编写一个应用程序,使用StringBuffer对象实现对字符串的编辑操作,包括:替换字符串中的某些字符,删除串中某些字符,在字符串中插入或尾部加入新的字符串,翻转字符串等。
实训11简要提示 • String 类的字符串构造函数可以使用String("ABCDE");的形式。 • String 类中,equals() 方法判断字符串是否相等,compareTo()方法比较字符串的大小。 • StringBuffer类的字符串构造函数可以使用StringBuffer("ABCDE");的形式。 • StringBuffer类中,replace()方法用来替换字符串,insert()方法用来插入字符串,delete()方法用来删除字符串,append()方法用来在尾部追加字符串,reverse()方法实现字符串翻转。
实训12 Math类 • 实训目的 • 掌握Math类的用法,完成一些常用的科学计算。 • 实训内容 • 编写一个应用程序,实现角度和弧度的转换、求常用函数的函数值等多种功能(利用Math类的方法) • 简要提示 • Math类定义的属性和方法是静态的,可以通过类名直接调用。 • E和PI是Math类定义了两个双精度常量,其使用方法是Math. E; Math.PI; • Math.toRadians()将度转换成弧度。 • Math.toDegrees() 将弧度转换成度。 • 三角函数中,各个方法的参数是弧度。
实训13 异常处理 • 实训目的 • 了解Java异常基础,会创建并处理有异常的Java程序。 • 掌握异常机制的应用。 • 实验内容 • 异常类型不匹配的程序。编写一个catch 语句中声明的异常类型不匹配的程序 • 包含多个catch 子句的异常处理程序。程序要求:在try 子句中设计通过两个catch 子句分别来捕获异常,在try块中同时设置两个异常的小程序。 • 程序要求:编写一个在try块或catch块中有return语句的程序,然后再在try块或catch块中加入System.exit()方法。 • 程序要求:编写一个描述异常层次结构由低到高的捕获顺序的小程序。 • 根据所给throws 和throw关键字的使用格式,编写一个具有声明抛弃异常的小程序。
实训13简要提示 • 如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception 是ArithmeticException 的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。 • 如果试图捕获一个不同类型的异常,将会发生意想不到的情况。 • 捕获异常的顺序和不同catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。 • 不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。Finally块不执行的条件:在try块或catch块中执行了System.exit()方法,终止虚拟机。 • 声明抛弃异常是在一个方法声明中的throws子句中指明的;throws子句中同时可以指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们。
实训14 文件属性的访问 • 实训目的 • 掌握File类的构造方法 • 掌握File类的常用方法,并能够灵活运用它来获取文件的相关属性。 • 实训内容 • 编写一个程序,使它能够像DOS操作系统命令Dir的功能,列出指定目录内所有文件和目录的相关信息。D:\javapj\myinput>java Jdir d: \javapj • 2005-3-16 9:31:02 461 ex.class • 2005-3-21 20:58:00 27 myproject.jcu • 2005-3-21 20:58:00 172 myproject.jcw • 2005-3-21 20:58:00 2 myproject.jcd • 2005-3-16 9:31:00 183 ex.java • 2005-3-21 90:57:50 89 mysys.java • 2005-4-16 23:18:44 554 myjava.jcu • 2005-4-16 23:18:44 262 myjava.jcw • 2005-3-21 21:12:06 <DIR> myinput • 2005-4-16 23:18:44 4175 myjava.jcd • 9个文件 5925字节 • 1个目录
实训14简要提示 • 运行该程序,如果没有给定参数,就显示当前目录下的文件与子目录相关信息。程序也可以从main(String args[])方法中接收一个参数,作为要显示的目录和文件名称。 • 引用字符串参数args[0]时,要考虑没有参数输入的情况可能出现的异常。可用以下代码来完成参数的读取。 • try{ • dir=args[0]; //dir是已定义的String对象 • }catch(ArrayIndexOutOfBoundsException e){ • dir="./"; //考虑没有参数传入时,dir的值是当前目录 • } • 根据传入的参数创建File类的实例,并判断该文件或目录是否存在。 • File f=new File(dir); • if(!f.exists()){ • System.out.println("文件或目录不存在!"); • System.exit(0); • }
在传入参数相连的文件或目录存在情况下,判断是否是目录,如果是目录则显示该目录中文件和相关子目录的有关情况;如是文件,则显示该文件的相关信息。(用相关变量记录文件数、目录数、字节数、字节总数)在传入参数相连的文件或目录存在情况下,判断是否是目录,如果是目录则显示该目录中文件和相关子目录的有关情况;如是文件,则显示该文件的相关信息。(用相关变量记录文件数、目录数、字节数、字节总数) • 目录的处理比较复杂,要获取该目录下的文件或子目录信息,可以使用listFiles()方法来返回该目录下的所有文件对象。如:File ls[]=f.listFiles();然后分别对返回的每个元素,判断是目录或文件,或是文件还要输出字节数。使用循环for(int i=0;i<ls.length;i++){ …}完成信息输出。 • 由于File类的lastModified()方法返回是时间是长整数,要输出日期和时间,可以使用Data类对象的方法实现。
实训15 文本文件的读写 • 实训目的 • 掌握FileInputStream类和FileOutputStream类的构造方法。 • 掌握FileInputStream类和FileOutPutStream类的常用方法。 • 能够利用FileInputStream和FileOutputStream对象完成对文件的读写。 • 实训内容 • 编写一个程序,能够完成对一个文本文件的复制功能。源文件名和目标文件名都在命令行中指定,同时在屏幕上输出该文件的内容。程序运行后的结果如图所示。 • D: \javapj\myinput>java CopyFile aa.txt bb.txt • Java语言是一种公司追求软件系统运行环境无关性的跨平台语言,为此Java平台将应用程序间、应用程序与磁盘文件之间的数据抽象为各种类型的流(Stream)对象,将文件系统中的文件抽象为File对象。 • 什么叫流?流式输入输出有什么特点? • Java流被分为字节流、字符流两大流类,两者有什么区别? • 复制文件完成,共284个字节!
实训15简要提示 • 由于源文件名和目标文件名在命令行中指定,所以必须要求有源文件名和目标文件名,且两者不能相同。 • 为源文件创建输入流对象,为目标文件创建输出流对象,对于文本文件内容的读写采用循环结构中输入流的read()和输出流write()方法实现。 • 读写结束,关闭输入输出流。
实训16 随机文件的读写 • 实训目的 • 掌握RandomAccessFile类的构造方法。 • 掌握RandomAccessFile类的常用方法,特别对于指针的控制。 • 能够利用RandomAccessFile对象完成对随机文件的读写。 • 实训内容 • 编写一个程序,结合教材本章例子8-6所创建的student.dat文件,能够实现对学生记录的随机访问,要求输入记录号,读出该记录对应的学生信息。
实训16简要提示 • 要将输入的字符转换成数值类型,参阅标准输入输出的数据类型转换。 • 要为student.dat文件创建一个与之连接的RandomAccessFile类的对象。 • 根据输入的记录判断是否超出文件的范围。(n指记录号的整型值,13是每条记录的宽度)。 • if(n*13>=ra.length()) • { • System.out.println("记录号超出范围!"); • } • 对于正常范围内的记录号,通过RandomAccessFile类的seek(n*13)来找出相应的记录,并用对应的方法去读取它。 • ra.seek(n*13); • b=new byte[8]; • ra.read(b); • int age=ra.readInt(); • boolean sex=ra.readBoolean(); • System.out.println(new String(b)+"\t"+age+'\t'+sex); • 要考虑程序中可能出现的异常及其处理。
实训17 Java Applet • 实训目的 • 通过本次实训,主要学习: • Java Applet程序的编写方法 • 向Java Applet程序传递参数的方法 • 图像的加载及现实的方法 • repaint()方法的执行过程 • 声音的加载及播放 • 实训内容 • 创建图片浏览器PictureViewer类,用于图片的浏览。要求:四个按钮分别实现相应的显示功能,并且在图片进行切换时播放声音进行提示,如图所示。图中所示的“图片浏览器”几个字是通过网页向Applet程序传递参数读入的。
实训17简要提示 • 可以通过getParameter()方法获得网页中的参数,通过getAudioClip()加载声音,通过getImage()方法加载图片。 • 在四个按钮的事件处理中,显示图片并播放声音。 • 网页中的参数的获得和声音的加载可以在init()方法中进行,图片的加载应该在按钮的事件处理中。 • 为了加载图片方便,可将图片按序号命名,程序中使用一个变量进行表明。 • 在程序中可以通过paint()方法显示图片和获得的参数。 • 为了在按下按钮后能够显示图片,可以在事件处理的actionPerformed()方法中使用repaint()方法自动调用paint()方法,以重绘图片。
实训18 图形用户界面(—) • 实训目的 • 通过本次实训,主要学习基本AWT组件及布局管理器的使用,包括: • 标签、按钮、文本框、复选框、单选框等基本AWT组件的使用。 • 常用布局管理器的使用。 • 利用布局管理器的混合使用来创建较复杂的图形用户界面。 • 实训内容 • 设计一个applet,分别设置FlowLayout的对齐方式为居中、左对齐、和右对齐,在applet中放置五个按钮,按钮文本任意,用appletviewer观察小程序的运行情况,试着改变appletviewer窗口大小,观察各种对齐方式下,按钮的排列有何变化。 • 设计一个applet,使用BorderLayout,设置组件水平、竖直间距分别为10和5像素,在applet中放置五个按钮,按钮文本任意,分别放在BorderLayout的五个区,用appletviewer观察小程序的运行情况,试着改变appletviewer窗口大小,观察组件变化。
设计一个applet,使用GridLayout,在applet中放置13个按钮,按钮文本任意,分别设置GridLayout的行列为[4,4]、[3,5]、[5,3],用appletviewer观察小程序的运行情况,试着改变appletviewer窗口大小,观察组件变化。把GridLayout的行列分别改变为[13,0]和[0,13],会出现什么情况?你能得出什么结论?设计一个applet,使用GridLayout,在applet中放置13个按钮,按钮文本任意,分别设置GridLayout的行列为[4,4]、[3,5]、[5,3],用appletviewer观察小程序的运行情况,试着改变appletviewer窗口大小,观察组件变化。把GridLayout的行列分别改变为[13,0]和[0,13],会出现什么情况?你能得出什么结论? • 设计一个applet,使用CardLayout,设置4个卡片,每张卡片上都放置一个Label,Label的内容分别是“百川东到海”、“何时复西归”、“少年不努力”、“老大徒伤悲”,字体自定。 • 混合使用布局管理器,实现以下简易QQ用户登录界面的小程序。
实训18简要提示 • 布局管理器可以管理放置在容器中的组件的排列。 • 仅使用几种简单的布局管理器还不能设计出比较出色、复杂的GUI。可以采取把组件放置到Panel中,然后把Panel再放置在其它容器中的方法来创建较复杂的GUI。 • 更复杂的GUI需要使用其他布局管理器如GridLayout等,还可以使用无布局(不推荐采取这种方式,因为在不同的平台上GUI可能具有不同的表现)。 • GUI的设计需要有熟练的技巧和丰富的经验,必须加强实践,才能创建出满意的GUI。
实训19 图形用户界面(二) • 实训目的 • 通过本次实训,主要学习图形用户界面中的Java常用事件处理。包括: • 理解Java事件处理机制。 • 掌握常用Java事件如动作事件、选择事件、鼠标事件、调整事件等的处理方法。 • 掌握菜单及快捷菜单的设计方法及菜单事件的处理。 • 实训内容 • ActionListener及KeyListener的使用。设计如下简易聊天室程序,在文本框中输入文字,单击“发送”按钮,或在文本框中击回车键,文本框中的文字添加到多行文本区中(你可以设置多行文本区的字体颜色,字体等,使它更像一个实际的聊天室)。 • MouseListener、MouseMotionListener的使用。设计如下绘图小程序,选择图形类别,拖动鼠标绘制不同的图形。绘圆时,鼠标起点为圆心,鼠标移动的距离为半径。 • WindowListener的使用。设计如下GUI,运行程序时分别执行窗口的最大化、最小化、激活、失去焦点等操作,把当前操作添加到多行文本框中。 • AdjustmentListener的使用。设计如下调色板程序,移动三个滚动条,改变测试区的背景颜色。
实训19简要提示 • 不仅要设计美观的GUI,还要让程序通过GUI与用户交互。 • 需要考虑用户可能的操作,这些操作将产生事件,事件源是哪些组件,由哪个(或哪些)接口来处理这些事件等。 • 必须熟悉事件的类型及处理事件的方法。 • 可以自己选择一些典型例子,练习KeyListener、ItemListener的使用。