全国计算机等级考试二级Java语言程序设计试题及答案(一)

全国计算机等级考试二级Java语言程序设计试题及答案(一)

2023年7月28日发(作者:)

一、选择题(每小题1分,共40小题,共40分)

1.下列叙述中正确的是( )。

A.一个算法的空间复杂度大,则其时间复杂度必定大

B.一个算法的空间复杂度大,则其时间复杂度必定小

C.一个算法的时间复杂度大,则其空间复杂度必定小

D.上述3种说法都不对

D。【解析】算法的时间复杂度和空间复杂度是从不同的角度来衡量算法的执行情况的,它们之间没有内在联系。

2.开发软件时对提高开发人员工作效率至关重要的是( )。

A.操作系统的资源管理功能

B.先进的软件开发工具和环境

C.程序员的数量

D.计算机的并行处理能力

B。【解析】先进的软件开发工具和环境对提高开发人员工作效率是至关重要的。

3.程序设计语言的基本成分是数据成分、运算成分、控制成分和( )。

A.对象成分

B.变量成分

C.语句成分

D.传输成分

D。【解析】程序设计语言的基本成分有:数据成分,用于描述程序所涉及的数据;运算成分,用于描述程序中所包含的运算;控制成分,用于描述程序中所包含的控制;传输成分,用于表达程序中数据的传输。

4.对长度为n的线性表进行顺序查找,在最坏情况下需要比较的次数为( )。

A.125

B.n/2

C.n

D.n+l

C。【解析】对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查找到所要找的元素为止。在最坏情况 下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为n。

5.有下列二叉树,对此二叉树前序遍历的结果为( )。

A.XZCYAB

B.XYZABC

C.XYABCZ

D.XYAZBC

D。【解析】对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。

6.下列叙述中正确的是( )。

A.在面向对象的程序设计中,各个对象之间具有密切的关系

B.在面向对象的程序设计中,各个对象都是公用的

C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小

D.上述3种说法都不对

C。【解析】面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。

7.软件工程的理论和技术性研究的内容主要包括软件开发技术和( )。

A.消除软件危机

B.软件工程管理

C.程序设计自动化

D.实现软件可重用

B。【解析】基于软件工程的目标,软件工程的理论和技术性研究的内容主要包括软件开发技术和软件工程管理。

8.在对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。

A.调用语句

B.命令

C.H令

D.消息

D。【解析】在面向对象方法中,对象之间通过消息进行通信。消息中只包含传递者的要求,但并不指示接受者应该怎么完成这些处理。

9.下列选项中,是软件调试技术的是( )。

A.错误推断

B.集成测试

C.回溯法

D.边界值分析

C。【解析】软件调试技术包括强行排错法、回溯法和原因排除法。边界值分析、错误推断都是黑盒测试的方法。

10.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( )。

A.DB包括DBS和DBMS

B.DBMS包括DB和DBS

C.DBS包括DB和DBMS

D.没有任何关系

C。【解析】数据库系统(DBS)由数据库(DB)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台5个部分组成,因此DB和DBMS都是DBS的组成部分。

11.下列( )不是高级程序设计语言。

A.FORTRAN

B.Java

C.C++

D.Visual ASM

D。【解析】高级语言是一类人工设计的语言,因为它对具体的算法进行了描述,所以又称为算法语言。它是面向程序设计独立于计算机的硬件。目前,计算机常用的高级语言有:BASIC语言、FORTRAN语言、COBOL语言、PASCAL语言、C语言、PROLOG语言、而当前流行的,面向对象的程序设计语言有C++和用于网络环境的程序设计语言Java等。

12.16根地址总线的寻址范围是( )。

A.531KB

B.64KB

C.640KB

D.1MB

B。【解析】假设地址总线有n条,内存的寻址范围是2n。

13.在一所大学中,每个系都有自己的局域网,则连接各个系的校园网( )。

A.是广域网

B.还是局域网

C.是地区网

D.这些局域网不能互连

B。【解析】广域网是指远距离的计算机互联网络,分布范围可达几千千米乃至上万千米甚至跨越国界、州界、遍及全球范围。局域网是指一个局部区域中的、近距离的计算机互联网络,通常采用有线方式连接,分布范围从几百米到几千米。例如,一座大楼内或相邻的几座楼之间的互联网络。一个单位、学校内部的网络多为局域网。

14.下列关于信息加密的叙述中,正确的是( )。

A.加密通过加密算法实现

B.加密前的文件称为密文

C.加密后的文件称为明文

D.将明文变为密文的过程称为解密

A。【解析】一般人们将加密前的文件称为明文,而加密后的文件称为密文,因此加密的目的就是将明文变为密文。而反过来将密文变为明文的过程则称为解密。

15.下列关于域名和IP地址的叙述中,不正确的是( )。

A.在Internet中访问一台主机必须使用它的主机名

B.200.201.202.203是一个C类I P地址

C.I P地址采用的是分层结构

D.主机名与I P地址是一一对应的

A。【解析】每台直接连接到Internet上的计算机、路由器都必须有唯一的IP地址。IP地址是Internet赖以工作的基础。Internet中的计算机与路由器的IP地址采用分层结构,它是由网络地址与主机地址两部分组成。对于C类地址,其网络地址空间长度为21位,主机地址空间长度为8位,C类I P地址范围从:l92.0.0.0~223.255.255.255。主机名与它的IP地址一一对应,因此在Internet上访问一台主机既可以使用它的主机名,也可以使用它的I P地址。

16.Java语言中。负责并发管理的机制是( )。

A.垃圾回收

B.虚拟机

C.代码安全

D.多线程

D。【解析】多线程是Java程序的并发机制,它能同步共享数据、处理不同的事件。

17.下列描述中,错误的是( )。

A.Java要求编程者管理内存

B.Java的安全性体现在多个层次上

C.Applet要求在支持Java的浏览器上运行

D.Java有多线程机制

A。【解析】为了充分利用资源,Java有一个系统级的线程,用来对内存的使用进行跟踪,它可以在系统空闲时对不用的内存空间进行回收,从而使程序员从繁忙的内存管理中解放出来。

18.Java为移动设备提供的平台是( )。

A.J2ME B.J2SE

C.J2EE D.JDK 5.0

A。【解析】Java 2平台包括:J2ME平台、J2SE平台和J2EE平台。其中:J2ME是为嵌入式和移动设备提供的Java平台;J2SE是面向企业级应用与服务的综合性标准开发平台;J2EE是面向大型企业级用容器管理专用构件的应用平台。而JDK 5.0是一个Java开发软件包。 19.JDK中提供的文档生成器是( )。

A.javadoc.exe

B.javap.exe

C.java.exe

D.javaprof.exe

A。【解析】在JDK中:javadoc.exe是文档生成器,将Java源代码和包以MML格式生成AP文档;java.exe是Java解释器;javap.exe是Java反汇编器;javaprof.exe是Java剖析工具,提供解释器剖析信息。

20.下列不属于Swing中构件的是( )。

A.JPanel

B.JTable

C.Menu

D.JFrame

C。【解析]JPanel是Swing的中间容器;JTable是Swing中可编辑信息的构件;JFrame是Swing的顶层容器。

21.阅读下面程序

22. importjava.io.*;

23. public class TypeTransition{

24. public static void main(String args[]){

25. char a=’h’;

26. int i=100 ;

27. int J=97;

28. int aa=a+i;

29. System.out.println("aa="+aa);

30. char bb=(char)j;

31. System.out.println("bb="+bb):

32. }

33. }

34. 如果输出结果的第二行为bb=a,那么第一行的输出结果是( )。

35. A.aa=I

36. B.aa=204

37. C.aa=v

38. D.aa=156

B。【解析】本题考查的是Java的基本数据类型及其运算。程序开始生成了一个字符型变量a和3个整型变量i、j、aa。而整型变量aa的初始值是a+i,其中a是一个字符

型变量。如何进行加法运算呢?Java语言规定,char型数据可以自动转换成int类型,转换的结果就是该字符的ASCIl码值。因此,整型变量aa的初始值为字符”h”的ASCIl码值加上l00。如果记住h的ASCIl码值是104,则直接就确定aa的初始值是204,选项B为正确答案。如果记不得h的ASCIl码,题目中则给出提示。题目中说”输出结果的第二行为bb=a”,也就是字符bb的值为字符a,bb的生成语句是char bb=(char)j,是把整型变量j的值强制转换为字符型。同样,把ASCIl码值为j(97)所对应的字符赋值给bb。显然,字符a的ASCIl码值为97,字符b的ASCIl码值为98,依次类推,字符h的ASCIl码为l04。因此,本题的正确答案是B。

22.阅读下面程序

public class Operators And Expressions(

void equals Methodl(){

Stringsl一new String("how are you");

Strings2=new String("how are you");

System.out.println(s1= =s2):

}

public static void main(String args[]){

Operators And Expressions Oper And Exp=new Oper-

ators And Expressions

();

//用于复合类型数据的”= =”运算符

OperAndExp.equalsMethodl();

}

}

程序运行结果是( )。

A.= =

B.true

C.false

D.equal

C。【解析】本题考查的是Java语言中运算符的特殊用法。相等比较运算符"= =",不仅可用于基本类型的数据之间的比较,还可以用于复合类型数据之间的比较。但是,对于复合类型数据的"= ="运算,其比较的目标是两个操作数是否是同一个对象。如果需要比较两个对象的值是否相同,则可以调用equals()方法。题目中函数equalsMethodl()的代码非常简单,首先生成两个字符串对象sl和s2,然后输出表达式"sl= =s2"的结果。根据上面介绍的相等比较运算符的用法,字符串对象sl和s2是复合类型数据,因此表达式"sl= =s2"比较的是sl和s2是否同一个对象。显然,sl和s2虽然具有相同的值,即"how are you",但它们是两个不同的对象。因此,本题的正确答案是C。

23.阅读下面代码

if(x= =0){System.out.println("冠军");)

elseif(x>一3){System.Out.println("亚军");}

else{System.out.println("季军");}

若要求打印字符串”季军”,则变量X的取值范围是( )。

A.x=d&x<=-3

B.x>O

C.x>-3

D.x<=-3

23.D。【解析】本题考查的是条件分支语句if-else。if-else根据判定条件的真假来执行两种操作中的一种。当条件为真时,执行if语句后面的代码块;当条件为假时,执行else后面的代码块。题目中的代码段是一个if-else的嵌套语句,根据if-else语句的执行过程来进行分析。当x的值为0时,布尔表达式"x= =0"的结果为真,就输出”冠军”;当x的值不为0时,则执行else语句中的内容。else语句中的代码又是一个if-else语句,还是和上面一样进行分析。当X的值不等于0且大于-3时,布尔表达式”x>-3”的结果为真,输出"亚军";当x的值不等于0且不大干-3,也就是X的值不等于0同时x的值小于等于-3时,则输出"季军"。经过上述分析可知,要想输出"季军",x所满足的条件为x!=O&x<=-3,但是当x<=-3时,x的值一定不会为0。所以,X所满足的条件可以简写为x<=-3。因此,本题的正确答案为D。

24.下列关于构造方法的叙述中,错误的是( )。

A.Java语言规定构造方法名与类名必须相同

B.Java语言规定构造方法没有返回值,但不用void声明

C.Java语言规定构造方法不可以重载

D.Java语言规定构造方法只能通过new自动调用

C。【解析】本题考查的是构造方法的使用。Java语言中,构造方法是一种特殊的方法,是为对象初始化操作编写的方法,用它来定义对象的初始状态。Java中的每个类都有构造方法,它也是由方法名、参数和方法体组成的。构造方法有如下特点:

·构造方法的名字必须与类名相同。

·构造方法不返回任何数据,但不用void来声明。

·用户不能直接调用构造方法,必须通过关键字new自动调用。

·构造方法可由用户在类中定义,默认时由Java语言自动生成。但它是个空方法,变量被赋予该数据类型的默认值。

·在构造方法实现中,可以进行方法重载,即定义多个构造方法。重载构造方法的目的是使类具有不同的初始值,为类对象的初始化提供方便。根据上述构造方法的特点可知,本题选项C的说法是错误的。

25.下列适配器类中不属于事件适配器的是( )。

A.MouseAdapter

B.KeyAdapter

C.ComponentAdapter

D.FrameAdapter

D。【解析】本题考查java.awt.event包中定义的适配器类。该包中定义的适配器类包括①ComponentAdapter构件适配器;②ContainerAdapter容器适配器;③FocusAdapter焦点适配器;④MouseAdapter鼠标适配器;⑤KeyAdapter键盘适配器⑥WindowAdapter窗口适配器,由此可知本题答案为D。

26.下列类中属于字节输入抽象类的是( )。

A.FileInputStream

B.ObjectInputStream

C.FiterInputStream

D.InputStream

D。【解析】在Java中定义了两种类型的流,字节型和字符型,这两种流分别用4个抽象类表示:InputStream,OutputStream,Reader,Writer,其中InptutStream和OutStream表示字节流,Reader和Reader是表示字符流,所以字节输入抽象类为InptutStream。

27.能向内部直接写入数据的流是( )。

A.FileOutputStream

B.FileInputStream

C.ByteArrayOutputStream

D.ByteArraylnputStream

C。【解析】本题考查Java的内存读写。在java.io中,还提供了 ByteArrayInputStream、ByteArrayoutputStream和StringBufferInputStream类可直接访问内存,它们是InputStream和OutputStream的子类。用ByteArrayOutputStream可向字节数组写入数据;ByteArrayInputStream可从字节数组中读取数据。

28.下列运算符中属于关系运算符的是( )。

A.= =

B.=

C.+ =

D.- =

A。【解析】本题考查Java的关系运算符。B中写法不正确,C、D均为赋值运算符。

29.下列方法中,声明抛出InterruptedException类型异常的方法是( )。

A.suspend()

B.resume()

C.sleep()

D.start()

C。【解析】本题考查线程的基本操作。Java中提供了interrupt方法用来中断一个线程,当调用一个线程的interrupt方法时,即向该线程发送一个中断请求。在调用线程的interrupt方法时,如果该线程由于调用了sleep方法或wait方法而正在处于阻塞状态,那么线程会抛出一个InterruptException异常。

30.下列关于System类的叙述中,错误的是( )。

A.System类是一个final类

B.System类不能实例化

C.System类中没有定义属性

D.System类主要提供了系统环境参数的访问

C。【解析】本题考查System类的基本知识。Systern类是一个final类,所有的方法都用类变量来调用,对System类不可能实例化。System类主要用来提供标准输入/输出和系统环境信息的访问设置。而System类的属性有:①public static final InputStream in;标准输入;②publicstatic

final OutputStream out;标准输出;③pubhc static finalPrintStream err;标准错误输出。

31.阅读下面程序

32. public class Increment{

33. public static void main(stringargs[]){

34. int C;

35. c=5:

36. System.out.println(c);

37. System.out.println(c++):

38. System.out.println(c);

39. }

40. }

41. 程序运行结果是( )。

42. A.5

43. 6

44. 6 45. B.5

46. 5

47. 6

48. C.6

49. 7

50. 7

51. D.6

52. 6

53. 6

54.

B。【解析】本题考查的是Java增量运算符"++"。 x++是先使用后加l,即首先使用X的值进行表达式的计算,然后才对x的值加1。而++x是先加1后使用,即首先对x的值加1,然后使用x的值进行表达式的计算。本题首先生成一个整型变量C,其初始值为5。第一条输出语句输出c的初始值,即5。然后,第二条输出表达式c++的结果,即先输出C的值,然后才对c的值加1,所以,第二条输出语句输出的是5,输出后c的结果才为6。最后一条输出语句输出结果为6。因此,本题的正确答案为B。

32.下列叙述中,错误的是( )。

A.JavaApplication与Applet所用编译命令相同

B.通常情况下JavaApplication只能有一个main()方法

C.JavaApplet必须有HTML文件才能运行

D.JavaApplet程序的.class文件可用Java命令运行

D。【解析】本题考查的是Java中的Applet以及Applet与Application的区别。Applet是能够嵌入HTML语言中,并能够在浏览器中运行的类。Applet的运行环境是Web浏览器,所以必须建立HTML文件,告诉浏览器如何加载与运行Applet。因为Applet是不能直接通过Java命令行启动运行的。所以选项D的说法错误。

33.下列关于Java语言中线程的叙述中,正确的是( )。

A.线程由代码、数据、内核状态和一组寄存器组成

B.线程间的数据是不共享的

C.用户只能通过创建Thread类的实例或者定义和创建Thread子类的实例,建立和控制自己的线程

D.因多线程并发执行而引起的执行顺序的不确定性可能造成执行结果的不确定

D。【解析】本题考查线程的基本知识。线程与进程在概念上是相关的,线程是由表示程序运行状态的寄存器、程序计数器、栈指针以及堆栈组成,它不包含进程地址空间中的代码和数据。代码所操作的数据是Java线程模型中的一个组成部分,数据与代码是独立的。数

据可以被多个线程共享,也可不共享。Java语言中提供两种创建线程的方法,一种是通过继承Thread类创建线程,另一种是通过实现Runnable接口来创建线程。

34.处理对象传输的接口是( )。

A.Serializable

B.C:loneable

C.hemListener

D.ActionListener

A。【解析】处理对象传输就是把对象串行化。Java语言中,如果要串行化某些类的对象,这些类就必须实现Serializable接口。

35.在读取二进制数据文件的记录时,为了提高效率常

常使用的一种辅助类是( )。

A.InputStream

B.FileInputStream

C.StringBuffer

D.BufferedReader

C。【解析】本题考查Java语言的输入/输出流。InputStream类、FilelnputStream类和BufferedReader类都是Java语言中和输入输出直接相关的类,不属于辅助类,因此可以直接判断出选项C为正确答案。

36.在Applet中显示文字、图形等信息时,应使用的方法是( )。

A.init()

B.start()

C.paint()

D.destroy()

C。【解析】paint()是与Applet显示相关的方法,由它来具体执行Applet的绘制功能。init()方法用于初始化Applet,start()方法用于激活Applet。在init()方法完成后,将调用start()方法,而且在Applet每次显示时都要调用。destroy()方法用于彻底终止Applet。

37.关于线程的生命周期以下状态正确的是( )。

A.新建状态、可运行状态、阻塞状态、恢复状态和终止状态

B.新建状态、运行状态、阻塞状态、恢复状态和终止状态

C.新建状态、可运行状态、运行状态、阻塞状态和终止状态

D.新建状态、可运行状态、运行状态、恢复状态和终止状态

C。【解析】线程生命周期中出现的状态包括:新建状态、可运行状态、运行状态、阻塞状态和终止状态。

38.Thread类中能运行线程的方法是( )。

A.resume()

B.start()

C.run()

D.init()

C。【解析】resume()是Thread类提供的用于线程控制的方法;start()是Thread类中的方法,新建的线程不会自动运行,必须调用线程的start()方法才能运行该线程;run()是Thread类中的方法,在该方法中定义了线程的具体行为,线程开始执行时,就是从它的run()方法开始执行的,就像Java应用程序从main()开始、Applet从ink()开始一样;init()不是Thread类中的方法。

39.以下不是APPLET标记的选项是( )。

A.PARAM

B.BODY

C.CODEBASE

D.ALT

B。【解析】标记的一般格式是:

[CODEBASE=codebaseURL]

CODE=appletFile

[ALT=alternateText]

[NAME=appletlnstanceName]

WIDTH=pixels

HEIGHT=pixels

[ALIGN=alignment]

[VSPACE=pixels]

[HSPACE=pixels]

[ARCHIVE=archiveFiles]

>

[

ue>]

[

ue>]

[alternateHTML]

因此可以看出,选项B不是APPLET标记。

40.在Java中,与数据库连接的技术是( )。

A.开放数据库连接

B.Java数据库连接

C.数据库厂家驱动程序

D.数据库厂家的连接协议

B。【解析】开放数据库连接(ODBC,Open Datebase Connectivity),它是用C语言定义的。由于J2EE要求与Java绑定,因此规定使用Java数据库连接(JDBC,Java DataBase Connectivity),作为Java与数据库连接的技术。

二、基本操作题(共18分)

三、 本题定义了一个求两个数的最大值的方法max,并调用该方法计算67和23的最大值。

四、 public class javal{

五、 public static void main(String[]args){

六、 javal temp=new javal();

七、 int res=max(67,23);

八、 System.out.println("res="+res);

九、 }

十、 static int maX( ){

十一、 int maxNum;

十二、 if(a>b)

十三、 ;

十四、 else

十五、 maxNum=b;

十六、 ;

十七、 }

十八、 }

第1处:int a,int b

第2处:maxNum=a 第3处:return maxNum

【解析】第1处定义max()方法中的两个整型形参;第2处将两者中较大的赋给maxNum;第3处返回最大值。

三、简单应用题(共24分)

本题的功能是对下拉菜单项的操作,包括添加和删除。页面包括一个下拉菜单、一个文本框和两个按钮“删除”和“添加”,选中下拉菜单的一项后,可以通过“删除”按钮从下拉菜单中删除该项,在文本框中填入字符串后,单击“添加”按钮就可以将该项添加到下拉菜单中,所有信息都将显示在右侧的文本域中。

import java.awt.*;

import java.awt.event.*;

public class java2 extends java.applet.Applet imple-

ments hemListener,ActionListener

{Choice choice;

TextField text;

TextArea area;

Button add,del;

public void init() .

{choice:new Choice();

text=new TextField(8);

area:new TextArea(6,15);

choice.add("音乐天地");

choice.add("武术天地");

choice.add("象棋乐园");

choice.add("交友聊天");

add=new Button("添加");

del=new Button("删除");

add.addActionListener(this);

del.addActionListener(this);

choice.addItemListener(this);

add(choice);

add(del);add(text);add(add);add(area);

}

public void itemStateChanged(hemEvent e)

{String name= ;

int index=choice.getSelectedIndex();

area.setText("\n"+index+":"+name);

}

public void actionPerformed(ActionEvent e)

{if(e.getSource()= =add||e.getSource()= =

text)

{String name=text.getText();

if(name.length()>0)

{choice.add(name);

choice.select(name);

area.append("\n添加"+name);

}

}

else if(e.getSource()= =del)

{choice.remove( );

area.append("\n删除"+choice.getSelectedItem

());

}

}

}

第1处:choice.getSelectedltem()

第2处:choice.getSelectedIndex()

【解析】第1处是获取当前选中项的数据;第2处清除选中项的索引号。

四、综合应用题(共18分)

五、 本题的功能是定义自已的组件类。窗口中排布着12

六、 个按钮,鼠标移动按钮时,按钮背景颜色改变,用鼠标单击

七、 按钮时,后台将显示该按钮对应的字符。

八、 import java.awt.*;

九、 import java.awt.event.*;

十、 import java.util.*;

十一、 class java3 extends Frame{

十二、

十三、 java3(){

十四、 super("java3");

十五、 addWindowListener(new WindowAdapter(){

十六、 public void windowClosing(WindowEvent e){

十七、 System.exit(O);

十八、 }

十九、 });

二十、 setLayout(new GridLayout(4,3,6,6));

二十一、 for(int i=0;i

二十二、 KeyButton kb=new KeyButton(keys.charAt

二十三、 (i));

二十四、 kb.addkeyListener(this);

二十五、 kb.setBackground(Color.pink);

二十六、 kb.setForeground(Color.black);

二十七、 add(kb);

二十八、 }

二十九、 setSize(200,200);

三十、 show();

三十一、 }

三十二、 class KeyEventHandler extends KeyAdapter{

三十三、 public void keyTyPed(KeyEvent evt){

三十四、 System.out.println(evt.getChar());

三十五、 }

三十六、

三十七、

三十八、

三十九、

四十、

四十一、

四十二、

四十三、

四十四、

四十五、

}

public static void main(String[]args){

newjava3();

}

}

class KeyButton extends Component{

KeyListener keyListener;

boolean highlighted;

char key;

KeyButton(char k){

四十六、

四十七、

四十八、

四十九、

五十、

五十一、

五十二、

五十三、

五十四、

五十五、

五十六、

五十七、

五十八、

五十九、

六十、

六十一、

六十二、

六十三、

六十四、

六十五、

六十六、

六十七、

六十八、

六十九、

七十、

七十一、

七十二、

七十三、

七十四、

七十五、

七十六、

七十七、

七十八、

七十九、

八十、

this.key=k;

addMouseListener(new MouseEventHandler()):

}

public void paint(Graphics g){

int W=getSize().width;

int h=getSize().height;

String s=""+key;

FontMetrics fm=g.getFontMetrics();

if(highlighted){

g.setColor(getBackground());

g.fillRoundRect(0,0,w-1,h-1,10,10);

}

g.setColor(getForeground());

g.drawRoundRect(0,0,w-1,h-1,10,10);

g.drawString(s,(w-fm.stringWidth(s))/2,

(h-fm.getHeight())/2+fm.getAscent());

}

class MouseEventHandler extends MouseAdapter{

public void mousePressed(MouseEvent evt){

if(keyListener!=null){

keyListener.keyTyped(

new KeyEvent(KeyButton.this,KeyEvent.KEY_

TYPED,

System.currentTimeMillis(),

0,KeyEvent.VK_UNDEFINED,key));

}

}

public void mouseEntered(MouseEvent evt){

highlighted=true;

repaint();

}

public void mouseExited(MouseEvent evt){

highlighted=false;

repaint();

} 八十一、 }

八十二、 public synchronized void addKeyListerner(KeyLis-

八十三、 tener l){

八十四、 keyListener=AWTEventMuhieaster.add(key-

八十五、 Listener,1);

八十六、 }

八十七、 public synchronized void removeKeyListener(Key-

八十八、 Listener l){

八十九、 keyListener=AWTEventMuhicaster.remove

九十、 (keyListener,1);

九十一、 }

九十二、 }

第1处:int i=0;i

第2处:kb.addKeyListener(new KeyEventHandler())

第3处:system.out.println(evt.getKeyChar())

【解析】第1处是作为遍历keys中元素的条件,而keys中的字符元素就是各个按钮对应的字符。第2处注册键盘事件监听功能,KeyButton实现了KeyLIstener接口,而kb是KeyButton类的对象,所以它是合格的监听者。第3处将从键盘读到的字符输出。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690514773a362011.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信