
1.算法的空间复杂度是指( )。
A.算法程序的长度
B.算法程序中的指令条数
C.算法程序所占的存储空间
D.算法执行过程中所需要的存储空间
D。【解析】算法的空间复杂度,是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。
2.用链表表示线性表的优点是( )。
A.便于随机存取
B.花费的存储空间较顺序存储少
C.便于插入和删除操作
D.数据元素的物理顺序与逻辑顺序相同
C。【解析】数据结构是相互之间存在一种或多种特定关系的数据元素的集合。”关系”描述的是数据元素之间的逻辑关系,因此又称数据的逻辑结构。数据的存储结构是指数据结构(数据的逻辑结构)在计算机中的表示,又称物理结构。数据的存储结构有顺序存储结构和链式存储结构两种。不同存储结构的数据处理效率不同。由于链表采用链式存储结构,元素的物理顺序并不连续,对于插入和删除无需移动元素,很方便,当查找元素时就需要逐个元素查找,因此查找的时间相对更长。
3.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为( )。
A.GEDHFBCA
B.DGEBHFCA
C.ABCDEFGH
D.ACBFEDHG
B。【解析】二叉树的遍历有3种:前序、中序和后序。后序遍历首先遍历左子树或左子结点,然后遍历右子树或右子结点,最后访问根结点;中序遍历首先遍历左子树或左子结点,然后访问根结点,最后遍历右子树或右子结点;后序遍历首先访问根结点,然后遍历左子树或左子结点,最后遍历右子树或右子结点。本题根据前序遍历和中序遍历的
结果可以得出二叉树的结构,然后再对其进行后序遍历,因此答案为选项B。
4.下列数据结构中,能用二分法进行查找的是( )。
A.顺序存储的有序线性表
B.线性链表
C.二叉链表
D.有序线性链表
A。【解析】二分法查找只适用于顺序存储的有序线性表,对于顺序存储的非有序线性表和线性链表,都只能采用顺序查找。
5.结构化程序设计的3种基本结构是( )。
A.过程、子程序和分程序
B.顺序、选择和重复
C.递归、堆栈和队列
D.调用、返回和转移
B。【解析】程序的三种基本控制结构包括:顺序、选择和重复(循环),这三种结构就足以表达出各种其他形式的结构。
6.下列叙述中正确的是( )。
A.在模块化程序设计中,一个模块应该尽量多的包括与其他模块联系的信息
B.在自顶向下、逐步细化的设计过程中,首先应设计解决问题的第一个细节
C.在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则
D.在程序设计过程中,不能同时采用结构化程序设计
方法与模块化程序设计方法
C。【解析】在模块化程序设计中,模块之间的联系可以通过程序的控制结构来实现,在自顶向下、逐步细化的设计过程中,首先要考虑全局目标,而不是细节。在程序设计中模块化和结构化可以同时使用,一个模块的内部结构也要符合结构化设计原则。
7.设计软件结构是在软件生命周期的( )。
A.软件定义期
B.软件开发期
C.软件维护期
D.以上3个都不是
B。【解析】设计软件结构,是在软件概要设计阶段进行的,而概要设计属于软件开发期。
8.数据库技术的根本目标是要解决数据的( )。
A.存储问题
B.共享问题
C.安全问题
D.保护问题
B。【解析】在数据库系统中,需要对数据进行集中、统一的管理,以达到被多个应用程序共享的目标。
9.设计数据库的存储结构属于( )阶段。
A.需求分析
B.概念设计
C.逻辑设计
D.物理设计
D。【解析】物理设计阶段主要解决选择文件存储结构和确定文件存取的方法的问题,包括:选择存储结构、确定存取方法、选择存取路径、确定数据的存放位置。
10.相对于数据库系统,文件系统的主要缺陷有数据依赖、数据不一致性和( )。
A.可重用性差
B.安全性差
C.非持久性
D.冗余性
D。【解析】文件系统所管理的数据文件基本上是分散、相互的。因此相对于数据库系统,以此为基础的数据处理存在3个缺点:数据冗余大、数据的不一致性、程序与数据的相互依赖(简称为数据依赖)。
11.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,则可采用的方法是( )。
A.分块法
B.顺序法
C.二分法
D.散列法
A。【解析】分块查找是将表分成若干块,分块的原则是数据元素的关键字在块与块之间是有序的,而块内元素的关键字是无序的。分块法可以适应动态变化的要求。其他三种是在顺序存储的一组记录内进行查找的。
12.顺序存储结构的优点是( )。
A.删除运算方便
B.存储空间利用率高
C.插入运算方便
D.可以方便地运用到各种逻辑结构的存储表中
B。【解析】顺序结构逻辑上相邻的结点物理上也是相邻的。因此,其存储密度大,存储空间利用率高,但插入、删除运算操作不方便,需移动大量的结点。
13.用下列4种排序方法,对一个已排好序(由小到大)的序列进行由小到大排序时,选择( )方法最好。
A.冒泡排序
B.直接选择排序
C.直接插入排序
D.归并排序
C。【解析】直接插入排序的基本算法是:当插入第i(i>一1)个对象时,前面的V[o],V[1],…,V[i一1]已经排好序,这时,用V[i]的关键码与V[i一1],[i一2]…的关键码顺序进行比较,找到插入位置即将vEi]插入,原来位置上的对象则向后移。由此可知,直接插入排序法的关键码比较次数与对象的初始排列有关。在本题中,序列已经排好序,所以其i的取值达到了最大,也就是序列中元素的个数,其实根本无需比较和交换,所以这种方法是最佳的。
14.按层次次序将一棵有n-个结点的完全二叉树的所有结点从l~n编号,当i≤n/2时,编号为i的结点的左子树的编号是( )。
A.2i-1
B.2i
C.2i+1
D.不确定
B。【解析】完全二叉树中除最下面一层外,各层都被结点充满了,每一层结点个数恰是上一层结点个数的2倍。因此,从一个结点的编号就可推知它的双亲及左、右子树结点的编号。当i≤n/2时,编号为i的结点的左子树的编号是2i,否则结点i没有左子树。当i≤(n-1)/2时,编号为i的结点的右子树的编号是2i+1,否则结点i没有右子树。当i≠1时,编号为i的结点的双亲是结点i/2。
15.对于给出的一组权w={10,12,16,21,30},通过霍夫曼算法求出的扩充二叉树的带权外部路径长度为( )。
A.
B.1
C.200
D.300
C。【解析】其带权外部路径长度为:2×16+2×21+2×30+3×10+3×12=200。
16.JDK中,用( )命令对其源文件进行编译,生成字节码文件。
A.java.exe
B.javac.exe
C.javadoc.exe
D.javap.exe
B。【解析】本题考查JDK实用工具的使用。选项A错误,java.exe是Java语言解释器,直接从类文件执行Java应用程序字节代码,可接受class文件并启动Java虚拟机执 行;选项B正确,javac.exe是Java语言编译器,将Java源代码转换成字节码;选项C错误,javadoc.exe是根据Java源代码及说明语句生成HTML,文档;选项D错误,javap.exe是反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
17.以下叙述中不属于Java语言特点的是( )。
A.面向对象
B.可移植性
C.多线程
D.宏定义
D。【解析】本题考查Java语言的基本特点。选项A正确,Java最大的特点之一是跨平台、面向对象;选项B正确,解释同A;选项C正确,多线程是Java的一个主要特性,它使可执行程序具有同时保持几个线程执行的能力;选项D错误,Java不支持宏定义。
18.在Java语言中,封闭是借助于( )实现酊。
A.对象
B.类
C.数组
D.成员
B。【解析】Java是一个完全面向对象的语言,利用类把对象的属性和方法封装在一起,只对外界提供有限的接口。
19.Java对文件类提供了许多操作方法,能获得文件对象父路径名的方法是( )。
A.getAbsolutePath()
B.getParentFile()
C.getAbsoluteFile()
D.getName()
B。【解析】本题考查File类的基本知识。File类是通过文件名列表来描述一个文件对象的属性,通过File类提供的方法,可以获得文件的名称、长度、所有路径等信息,还可以改变文件的名称、删除文件等。
20.下列各项中属于合法标识符的是( )。
A.myid/2
B.+void
C.-5
D._vacl
D。【解析】Java语言的标识符是以字母、下画线和符号$为首字符的字符串,首字符后面可以跟字母、下画线、$和数字,且标识符是区分大小写的,标识符的字符数没有。A选项中含有非法符号”/”,故是错误的:B选项是以符号”+”开始的字符串也不符合规则;同理,C选项也是错误的。
21.下列各选项中属于Java保留字的是( )。
A.TRUE
B.NULL
C.FALSE
D.null
D。【解析】在Java中,常量null、false、true都是小写的。所以A、B和C选项中的字符串都不是Java的保留字。
22.下列各项中代表八进制整数的是( )。
A.0XA6
B.0144
C.1840
D.-lE3
B。【解析】Java语言中八进制整数为整型常量中的一种,以0开始,后加数字0~7组成。故只有B选项0144符合要求。
23.下列代码的执行结果是( )。
public class Test
{
public static void main(String args[])
{
System.out.println(5/2);
System.OUt.println(100%3.O)
}
}
A.2和1
B.2和1.0
C.2.5和1
D.2.5和1.0
B。【解析】由于5和2都是int型,所以语句System.out.println(5/2)的输出为2。由于操作数3.0为double型(Java语言中浮点数的默认值为double型),所以结果为double型,即1.0。
24.char类型被封装在( )中。
A.java.lang.Integer
B.java.lang.Char
C.java.lang.Boolean
D.java.lang.Character
D。【解析】Java语言中,char类型被封装在java.lang.Character中。
25.下面代码段的输出是( )。
if(5 8L7)0&8L5|2)system.out.println("true");
A.编译出错
B.5752
C.true
D.无任何输出
A。【解析】本题考查对位运算符和逻辑运算符的理解。位运算符”&”和”|¨用于按位将两个数进行与和或的操作,两个操作数可以是整型、字节型、长整型和短整型,但不能是浮点型数据。逻辑运算符&&只能对两个布尔型的数据进行运算,返回的结果也是布尔型的。
26.下列关于内部类的说法,正确的是( )。
A.内部类可以与它包含的类名相同
B.内部类只能使用它所在类的静态成员变量,不能使用它所在类的方法中的局部变量
C.内部类可以用abstract修饰定义为抽象类,不能用private或protected定义
D.外部使用内部类时必须给出类的全名
D。【解析】本题考查内部类的概念。在一个类的内部嵌套定义的类称为内部类,它的类名在定义它的类或程序段中或在表达式内部可以匿名使用,外部使用它时必须给出类的全名,所以选项D说法正确;内部类的类名不允许与它包含的类名相同,选项A说法错误;内部类可以使用它所在类的静态成员变量和实例成员变量,也可以使用它所在类的方法中的局部变量,选项B说法错误;内部类不仅可以用abstract修饰定义为抽象类,也可用private或protected定义,选项C说法错误。同时还要注意,内部类可作为其他类的成员,而且可访问它所在类的成员,除static内部类外,不能在类中声明static成员。
27.定义一个表示10个值为null的字符串数组,下面选项正确的是( )。
A.String []a;
B.String a[];
C.char a[l0][];
D.String a[]=new String[10];
D。【解析】本题考查字符串数组变量的声明。选项A和选项B的效果是一样的,都是用来定义一个字符串数组,但没有指明数组个数,不满足题目要求;选项C是一个二维的字符数组,在C语言中,一个二维的字符数组就可以表示一个一维的字符串数组,而在Java中,字符char是基本类型,字符串String则是以对象的形式来表示的;选项D正确,它定义了一个含有l0个元素的字符串数组,如果没有给字符串数组赋值,则默认为null。
28.有一个接口定义如下,下列选项中实现了该接口并且不是抽象的是( )。
interface A
{
int methodl(int i);
int method2(int j);
}
A.classBimplementsA B.classB
{ {
int methodl(){) int methodl(inti){)
int method2(){) int method2(intj){)
} }
C.class B implements A D.class B extends A
{ {
int methodl(int i){) int methodl(int i){}
int method2(int j){) int method2(int J){}
} }
C。【解析】本题考查在Java中接口的实现。接口是一种只含有抽象方法或变量的特殊的抽象类。在类的声明中用implements子句来表示一个类使用某个接口。选项A在方法内没有参数值;选项B只是定义了一个类,并没有实现与A的接口;选项C中使用关键字implements实现了该接口,这里接口中的方法并没有使用abstract修饰,所以不是抽象的;选项D中extends是用来继承父类的,而A并不是一个类,不能用extends.
29.下面程序段的输出结果是( )。
class Base
{
int i;
Base()
{
add(1);
}
void add(int v)
{
i+=v:
}
void print()
{
System.out.println(i);
}
}
class Extension extends Base
{
Extension()
{
add(2);
}
void add(int v)
{
i+=v*2:
}
}
public class Test
{
public static void main(String args[])
{
bogo(new Extension());
}
static void bogo(Base b)
{
b.add(8);
b.print();
}
}
A.9 B.18
C.20 D.22
D。【解析】本题考查继承和构造函数的用法。首先要明确对一个类的继承是指在父类的基础上构建了一个子类,子类继承了父类的方法和状态。题目所给程序段创建的是Extension类的实例,在运行时,从main()函数进入程序,所有调用add()方法的过程将始终和Extension类的add()方法动态绑定。初始值:i=0;创建实例newExtension();先调用父类的默认构造函数Base(),并在父类的默认构造函数中执行add(1),i=O+1×2,所以i=2,再调用子类的默认构造函数Extension(),子类的默认构造函数中执行add
(2),i-2+2×2,所以i=6;执行add(8);i=6+8×2,因此,最终i=22,正确答案为选项D。
30.通常我们使用( )方法来为一个部件注册事件。
A.add×××Listener
B.×××Listener
C.Listener×××
D.×××Listeneradd
A。【解析】本题考查事件的概念。每类事件都有对应的事件,是接口,根据动作来定义方法。AWT的构件类中提供注册和注销的方法。注册:public void add(listener);注销:public void remove(listener)。由此可见,选项A正确。
31.下列的( )原始类型在使用流时可以互换。
A.byte和boolean
B.char和int
C.byte和char
D.String和char
B。【解析】本题考查Java语言中字节类型的概念。在Java语言中,byte是字节类型,用1字节表示;boolean是布尔类型,用true和false表示,它们的表示方法并不一样,
也不提供它们之间的转换,选项A错误。Java内部用整数来表示char,通常可以在方法调用和其他语句中互换使用char和int,选项B正确。char用2字节表示,byte字节类型
用1字节表示,Java内部也不允许互换使用它们,选项C错误。String在Java语言中是一个类,它提供对字符串的一系列操作,而char是Java语言中的一个基本类型,它不是一个类,两者有本质的区别,故而它们是不能互换使用的,选项D错误。需要注意的是,在Java语言中提供的类都是以大写字母开头,基本类型都用小写字母表示。
32.下列关于HTML标记的说法,正确的是( )。
A.URL getDocumentBase()返回Applet主类的URL
B.URL getCOdeBase()返回包含Applet的HTML文件的URL
C.在HTML中不说明String getParameter(stringname)的参数,该方法将返回"0"
D.HTML标记方法用于获取HTML文件中关于Applet的信息
D。【解析】本题考查Applet中HTML标记方法。 URLgetDocumentBase()返回包含Applet的HTML文件的 URL,而不是返回Applet主类的URL,选项A错误。 URLgetC0deBase()返回Applet主类的URL,而环是返回 包含Applet的HTML文件的URL,选项B错误。String
getParameter(stringname)返回定义在HTML文件的指定参数,如果指定参数在HTML中无说明,该方法将返回"null",而不是"0",因此选项C错误。
33.下列关于Applet的说法,正确的是( )。
A.它们能读/写用户的文件系统
B.它们能与提供包含小程序的网页的站点之内的Internet站点联系
C.它们能在阅读者的系统上运行任何程序
D.它们能加载存储在用户系统上的程序
B。【解析】本题考查Java小程序(Applet)安全的概念。因为Java小程序运行在Web用户的系统上,所以对小程序所能完成的工作有一些严格的。它们不能读/写用户的文件系统,选项A说法错误。它们不能与提供包含小程序的网页的站点之外的Internet站点联系,选项B说法正确。它们不能在阅读者的系统上运行任何程序,选项C说法错误。它们不能加载存储在用户系统上的程序,如可执行程序和共享库。所有这些规则适用于运行在浏览器下的Java小程序,选项D说法错误。
34.resume()方法恢复( )的执行。
A.通过调用stop()方法而停止的线程
B.通过调用sleep()方法而停止运行的线程
C.通过调用wait()方法而停止运行的线程
D.通过调用suspend()方法而停止运行的线程
D。【解析】本题考查resume()方法的使用。在Thread的API文档中的说明是该方法恢复被挂起(suspende())的线程。该方法首先调用该线程的无参的checkAccess()方法,这可能在当前线程上抛出SecurityExeeption异常,如果该线程是活着的(alive)但被挂起(suspend()),它被恢复并继续它的执行进程。
35.下列方法中能完成主类实例初始化工作的是( )。
A.start()
B.stop()
C.ink()
D.paint()
C。【解析】本题考查对Applet必须要重载的几个方法的理解。选项A错误,start()方法使得程序从初始态进入运行态,当浏览器从图标状态恢复为窗口时,或者当用户离开包含Applet的主页后又再返回时,系统都会自动再执行一遍start()方法。选项B错误,stop()方法是和start()方法相对应的,当浏览器变成图标或者是用户离开Applet所在页面时,浏览器都会调用stop()方法,该方法也是可以被多次调用的。选项C正确,当创建JavaApplet且第一次使用支持Java的浏览器载入该Applet时,就会执行init()方法,通常在这方法中执行一次性的初始化操作。选项D错误,paint()方法是画图时必须要重载的方法。
36.下面的( )关键字通常用来对对象加锁,从而使得对对象的访问是排他的。
A.serialize
B.transient
C.synchronized
D.static
C。【解析】本题考查Java中对象加锁的概念。Java是多线程的语言,多个线程可以”同时”访问同一数据区,而在处理某些数据时不希望其他的线程修改那些数据的值或者某些操作是不可打断的,要做到这个,可以使用synchronized关键字声明这一点。
37.下列程序中,若从键盘中输入的是大写字母C,则程序输出的结果是( )。
Importjava.io.*;
public class Exam{
public static void main(String args[]){
int ch=0;
System.out.println("输入一个字符:");
try{
ch=System.in.read();
charch_A=’A’,ch_Z=’Z’;
int delta c=(int)ch A+(int)ch Z-ch;
syStem. out.println("编码后的字符为:"+(char)delta_c);
}
catch(IOException e){
e.printStackTrace();
}
}
}
A.C
B.Y
C.X
D.字母C的ASCIl码的整型值
C。【解析】本题考查考生阅读Java程序的能力。当使用h=System.in.read()语句从键盘读入大写字母C赋给ch,此时ch值为67,也就是字母C的ASCIl值。语句(int)
ch_A+(int)ch_Z-ch结果为88,ASCIl码中的88相当于字母X,所以输出为X,选项C正确。
38.下面的程序执行后,屏幕上显示的应是( )。
public class Exam{
public static void main(String[]args){
char charl[]=(’t’,’e’,’s’,’t’};
char char2[]=(’t’,’e’,’s’,’t’,’l’};
String sl=newString(charl);
String s2=newString(char2,0,4);
System.out.println(sl.equals(s2));
}
}
A.true
B.false
C.test
D.编译错误
A。【解析】本题考查考生对字符数组的理解。首先可以通过字符数组来生成一个字符串对象:String(char[]value)和String(char[]value,int startlndex,int numChars).
其中,startlnde峭定字符串在数组中的起始下标,num-Chars表示字符个数。然后再测试字符串是否相等,可调用equals()方法,两个字符串相等则返回true,否则返回false。
题目中sl和s2都是"test",所以最后返回是true,选项A正确。
39.以下( )命令能为远程对象生成stub和skeleton。
A.rmiregistry
B.serialver
C.rmic
D.rmid
C。【解析】本题考查J2SDK的RMl命令。rmiregistry命令是在当前主机的指定端口上启动远程对象注册服务程序;serialver命令是返回serialVersionUID的值;rmic命令为远程对象生成stub和skeleton;rmid命令可以激活系统守候进程,以便能够在Java虚拟机上注册和激活对象。
40.Java程序与数据库的连接机制是( )。
A.ODBC
B.JDBC
C.ODBCAPI
D.SQL/CLI
B。【解析】本题考查Java程序与数据库的连接。JDBC(Java Data Base Connectivity)是Java程序与数据库连接的一种机制。在Java虚拟机中有个特殊模块JDBC Driver Manager,既负责管理针对各种类型数据库软件的JDBC驱动程序,也负责和用户应用程序交互。
2、基本操作题(共18分)
本题统计score[]={37,,63,60,59,78,91)中成绩不
及格的人数。
public class javal{
public static void main(String[]args){
int score[]={37,,63,60,59,78,91),
int sum=0:
int i=0;
while(i
if(score[i]>=60){
;
;
}
;
i++;
}
System.OUt.println("below 60 sum:"+sum);
}
}
第1处:i++
第2处:continue
第3处:sum++
【解析】第1处是为往后遍历做自加;第2处是结束本次循环;第3处是如果符合不及格这个条件,则sum做累加统计。
3、简单应用题(共24分)
本题中,在窗口右侧添加了一个菜单,右侧为一个文本域,菜单有“File”和“Help”,“File”菜单中有菜单项“New”、“Open”、“Save”、“Save as”和“Exit”,其中“Open”的快捷键为,“Save”的快捷键为,而“Help”菜单以及其中的菜单项“Index”和“About”设定了第一个字母为其快捷字母,通过鼠标单击任一个菜单项或通过快捷键以及快捷字母,都能在后台输入所选择的菜单项。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax swing.event.*;
public class java2 extends JFrame
{
private J Menuhem savehem;
private JMenuhem saveAsltem
private JPopupMenu popup;
private JTextArea textArea;
public java2()
{setTitle("java2");
setSize(400,300);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
textArea=new JTextArea(0,0);
Container contentPane=getContentPane();
contentPane.add(new JSerollPane(textArea).
"Center");
JMenuBar menuBar=new JMenuBar();
menuBar.setLayout(new BoxLayout(menuBar.
BoxLayout.Y_AXIS));
getContentPane().add(menuBar, BorderLayout.
WEST):
HorizontalMenu fileMenu=new HorizontalMenu
("File");
fileMenu.addMenuListener(this);
JMenuhem openhem = new JMenultem
("Open");
openItem.setAceelerator(KeyStroke.getKeyStroke
(KeyEvent.VK_O,InputEvent.CTRL_MASK));
saveltem=new JMenuhem("Save");
savehem.setAccelerator(KeyStroke.getKeyStroke
(KeyEvent.VK_S,InputEvent.CTRL_MASK));
saveAshem=new JMenuhem("Save As");
menuBar.add(makeMenu(fileMenu,
new Object[]{
"New",Openhem,null,savehem,saveAshem.
null."Exit"
},this));
HorizontalMenu helpMenu=new Horizontal-
Menu("Help");
helpMenu. (’H’);
menuBar.add(Box.createVerticalGlue());
menuBar.add(makeMenu(helpMenu,
new Object[]
{new JMenuhem("Index",’I’),
new JMenuhem("About",’A’)
},this));
}
public void actionPerformed(ActionEvent evt){
String arg=evt.getActionCommand();
System.out.println(arg);
if(arg.equals("Exit"))
System.exit(0);
}
pubile void menuSelected(MenuEvent evt){
}
public void menuDeselected(MenuEvent evt){
}
public void menuCanceled(MenuEvent evt){
}
public HorizontalMenu makeMenu(Object parent,
Object[]items,Object target)
{
HorizontalMenu m=null:
if(parent instanceoI HorizontalMenu)
m=(HorizontalMenu)parent;
else if(parent instaneeof String)
m=new HorizontalMenu((String)parrent);
else
return null;
m.setMinimumSize(m.getPreferredSize());
for(int i=0;i
if(items[i]= =null)
m.addSeparator();
else
m.add(makeMenultem(items[i],target));
}
return m;
}
public static JMenuhem makeMenuItem(Object i-
tem,Object target)
{
JMenuItem r=null:
if(item instanceof String)
r=new JMenultem((String)item);
else if(item instanceof JMenuhem)
r=(JMenultem)item;
else return null;
if(target instanceof ActionListener)
r.addActionListener((ActionListener)target);
return r;
}
class HorizontalMenu extends J Menu{
HorizontalMenu(String label){
super(label);
JPopupMenu pm=getPopupMenu();
pm.setLayout(new BoxLayout(pm,BoxLayout.X
_AXIS));
setMinimumSize(getPreferredSize());
}
}
public static void main(String[] args){
Frame f=newjava2();
f.show();
}
}
第1处:implements ActionListener,MenuListener
第2处:setMnemonic
【解析】第1处是实现了ActionListener接口,MenuListener接口;第2处是设置Help的快捷键为。
4、综合应用题(共18分)
本题中,主窗口中有两个下拉菜单,一个控制绘制图形的颜色,另一个控制绘制的图形,在画板中单击鼠标,则以单击的位置为左上角、以选定的颜色绘制选定的图形。
import java.awt.*;
import java.awt.event.*;
class java3 extends Frame {
String[]figureNames={"圆形","椭圆形","正
方形","长方形");
String[]colorNames={"红色","绿色","蓝
色","黄色"};
Color[]colorValues={Color.red,Color.green,
Color.blue,Color.yellow);
Choice chFigure=new Choice();
Choice chColor=new Choice();
int curX,curY;
java3(){
super("java3");
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(O);
}
});
Panel P=new Panel(new GridLayout(1,O));
for(int i=0;i
ehFigure.addhem(figureNames[i]);
}
for(int i=0;i
chColor.addhem(eolorNames[i]);
}
P.add(chColor);
P.add(chFigure);
add(p,BorderLayout.NORTH);
addMouseListener(this);
setSize(300,300);
show();
}
public void update(Graphics g){
g.getColor(colorValues[chColor,getSelectedIndex
()]);
switch(chFigure.getSelectedlndex()){
case 0;
g.fillOval(curX,curY,30,30);
break;
case l:
g.fillOval(curX,curY,30,50);
break;
case 2:
g.fillRect(curX,curY,30,30);
break;
case 3:
g.fillRect(curX,curY,30,50);
break;
}
}
class MouseEventListener implements MouseAda-
pter{
public void mousePressed(MouseEvent evt){
curX=evt.getX();
curY=evt.getY();
repaint();
}
}
static public void main(String[]args){
new java3();
}
)
第1处:addMouseListener(new MouseEventListener())
第2处:g.setcolor(colorValues[chcolor.getselectedIn-
dex()])
第3处:class MouseEventListener extends MouseAda-
pter
【解析】第1处是注册鼠标,主要是单击动作;第2处是设置Graphics类对象g的颜色通过将从chColor中选中的字符串转换成colorValues类型来实现;第3处定义一个MouseEventListener类来继承MouseAdapter鼠标事件适配器。
