目录
第1章 成为程序员 1.1 选择编程语言 1.2 告诉计算机做什么 1.3 程序的工作原理 1.4 为什么程序不能正常工作 1.5 选择 Java编程工具 1.6 安装 Java开发工具 1.7 总结 1.8 问与答 1.9 测验 1.9.1 问题 1.9.2 答案 1.10 练习 第2章 编写第一个程序 2.1 编写程序所需的工具 2.2 创建 Saluton 程序 2.3 开始输入程序 2.3.1 class语句 2.3.2 main语句的作用 2.3.3 大括号 2.4 在变量中存储信息 2.5 保存编写好的程序 2.6 将程序编译为 class文件 2.7 修复错误 2.8 运行 Java程序 2.9 总结 2.10 问与答 2.11 测验 2.11.1 问题 2.11.2 答案 2.12 练习 第3章 Java之旅 3.1 第一站:Oracle 3.2 去 Java学校 3.3 在 JavaWorld 用午餐 3.4 在 NASA仰望天穹 3.5 回归正题 3.6 到 Java Boutique 去问路 3.7 在手机上运行 Java 3.8 总结 3.9 问与答 3.10 测验 3.10.1 问题 3.10.2 答案 3.11 练习 第4章 理解Java程序的工作原理 4.1 创建应用程序 4.2 向应用程序传递参数 4.3 创建 applet 4.4 总结 4.5 问与答 4.6 测验 4.6.1 问题 4.6.2 答案 4.7 练习 第5章 在程序中存储和修改信息 5.1 语句和表达式 5.2 指定变量类型 5.2.1 整数和浮点数 5.2.2 字符和字符串 5.2.3 其他数值类型的变量 5.2.4 布尔型变量 5.3 给变量命名 5.4 在变量中存储信息 5.5 运算符 5.5.1 变量的递增与递减 5.5.2 运算符优先级 5.6 使用表达式 5.7 总结 5.8 问与答 5.9 测验 5.9.1 问题 5.9.2 答案 5.10 练习 第6章 使用字符串来交流 6.1 在字符串中存储文本 6.2 在程序中显示字符串 6.3 在字符串中使用特殊字符 6.4 拼接字符串 6.5 将其他变量用于字符串中 6.6 字符串的高级处理 6.6.1 比较两个字符串 6.6.2 确定字符串的长度 6.6.3 改变字符串的大小写 6.6.4 查找字符串 6.7 导演及演员名单 6.8 总结 6.9 问与答 6.10 测验 6.10.1 问题 6.10.2 答案 6.11 练习 第7章 使用条件测试进行判断 7.1 if语句 7.1.1 小于和大于的比较 7.1.2 相等和不等 7.1.3 使用块语句组织程序 7.2 if-else 语句 7.3 switch语句 7.4 条件运算符 7.5 观察时钟 7.6 总结 7.7 问与答 7.8 测验 7.8.1 问题 7.8.2 答案 7.9 练习 第8章 使用循环重复执行操作 8.1 for循环 8.2 while 循环 8.3 do-while 循环 8.4 退出循环 8.5 给循环命名 8.6 测试计算机的运行速度 8.7 总结 8.8 问与答 8.9 测验 8.9.1 问题 8.9.2 答案 8.10 练习 第9章 使用数组存储信息 9.1 创建数组 9.2 使用数组 9.3 多维数组 9.4 对数组进行排序 9.5 对字符串中的字符计数 9.6 总结 9.7 问与答 9.8 测验 9.8.1 问题 9.8.2 答案 9.9 练习 第10章 创建第一个对象 10.1 面向对象编程的工作原理 10.2 对象示例 10.3 什么是对象 10.4 理解继承 10.5 建立继承层次 10.6 转换对象和简单变量 10.6.1 简单变量的类型转换 10.6.2 对象类型转换 10.6.3 在简单变量和对象之间进行转换 10.6.4 自动封装和拆封 10.7 创建对象 10.8 总结 10.9 问与答 10.10 测验 10.10.1 问题 10.10.2 答案 10.11 练习 第11章 描述对象 11.1 创建变量 11.2 创建类变量 11.3 用方法来创建行为 11.3.1 声明方法 11.3.2 参数不同的类似方法 11.3.3 构造函数 11.3.4 类方法 11.3.5 方法中变量的作用域 11.4 将一个类放在另一个类中 11.5 使用关键字this 11.6 使用类方法和类变量 11.7 总结 11.8 问与答 11.9 测验 11.9.1 问题 11.9.2 答案 11.10 练习 第12章 充分利用现有对象 12.1 继承的威力 12.1.1 继承行为和属性 12.1.2 覆盖方法 12.2 建立继承 12.3 使用现有的对象 12.4 将相同类型的对象存储到 Vector 中 12.5 创建子类 12.6 总结 12.7 问与答 12.8 测验 12.8.1 问题 12.8.2 答案 12.9 练习 第13章 创建简单的用户界面 13.1 Swing 和抽象窗口工具包 13.2 使用组件 13.2.1 窗口和框架 13.2.2 按钮 13.2.3 标签和文本框 13.2.4 复选框 13.2.5 组合框 13.2.6 文本区域 13.2.7 面板 13.3 创建自己的组件 13.4 总结 13.5 问与答 13.6 测验 13.6.1 问题 13.6.2 答案 13.7 练习 第14章 用户界面的布局 14.1 使用布局管理器 14.1.1 GridLayout管理器 14.1.2 BorderLayout管理器 14.1.3 BoxLayout管理器 14.1.4 使用Insets将组件隔开 14.2 应用程序的界面布局 14.3 总结 14.4 问与答 14.5 测验 14.5.1 问题 14.5.2 答案 14.6 练习 第15章 响应用户输入 15.1 让程序监听 15.2 设置要监听的组件 15.3 处理用户事件 15.3.1 复选框和组合框事件 15.3.2 键盘事件 15.3.3 启用和禁用组件 15.4 完善图形应用程序 15.5 总结 15.6 问与答 15.7 测验 15.7.1 问题 15.7.2 答案 15.8 练习 第16章 创建复杂的用户界面 16.1 滚动窗格 16.2 滑块 16.3 变更监听器 16.4 使用图像图标和工具栏 16.5 总结 16.6 问与答 16.7 测验 16.7.1 问题 16.7.2 答案 16.8 练习 第17章 创建交互式Web程序 17.1 标准applet方法 17.1.1 在applet窗口中绘画 17.1.2 初始化applet 17.1.3 启动和停止applet 17.1.4 销毁applet 17.2 将applet放到Web页面中 17.3 创建applet 17.3.1 在applet窗口中绘画 17.3.2 测试SalutonApplet程序 17.4 从Web页面传递参数 17.5 在applet中接收参数 17.6 在applet中处理参数 17.7 使用object标记 17.8 总结 17.9 问与答 17.10 测验 17.10.1 问题 17.10.2 答案 17.11 练习 第18章 处理程序中的错误 18.1 异常 18.1.1 在try-catch块中捕获异常 18.1.2 捕获多种不同的异常 18.1.3 出现异常后进行处理 18.1.4 抛出异常 18.1.5 忽略异常 18.2 抛出和捕获异常 18.3 总结 18.4 问与答 18.5 测验 18.5.1 问题 18.5.2 答案 18.6 练习 第19章 创建线程程序 19.1 线程 19.1.1 降低程序的速度 19.1.2 创建线程 19.2 使用线程 19.2.1 声明类 19.2.2 创建变量 19.3 从init( )开始 19.4 在创建URL时捕获错误 19.5 在paint( )方法中处理屏幕更新 19.6 启动线程 19.6.1 运行线程 19.6.2 停止线程 19.7 处理鼠标单击 19.8 循环显示链接 19.9 总结 19.10 问与答 19.11 测验 19.11.1 问题 19.11.2 答案 19.12 练习 第20章 读写文件 20.1 流 20.1.1 文件 20.1.2 从流中读取数据 20.1.3 缓冲输入流 20.2 将数据写入流中 20.3 读写配置属性 20.4 总结 20.5 问与答 20.6 测验 20.6.1 问题 20.6.2 答案 20.7 练习 第21章 读写XML数据 21.1 创建XML文件 21.2 读取XML文件 21.3 读取 RSS 聚合内容(Syndication Feeds) 21.4 总结 21.5 问与答 21.6 测验 21.6.1 问题 21.6.2 答案 21.7 练习 第22章 利用JAX-WS开发Web服务 22.1 定义服务端点接口 使用注解来简化Java代码 22.2 创建服务实现Bean 22.3 发布Web服务 22.4 使用Web服务描述语言文件 22.5 创建Web服务客户端 22.6 总结 22.7 问与答 22.8 测验 22.8.1 问题 22.8.2 答案 22.9 练习 第23章 创建Java2D图形 23.1 使用Font类 23.2 使用Color类 23.3 创建自定义颜色 23.4 绘制直线和形状 23.4.1 绘制直线 23.4.2 绘制矩形 23.4.3 绘制椭圆和圆 23.4.4 绘制弧线 23.5 绘制饼图 23.6 总结 23.7 问与答 23.8 测验 23.8.1 问题 23.8.2 答案 23.9 练习 第24章 编写Android app 24.1 Android简介 24.2 创建 Android app 24.2.1 剖析一个Android新项目 24.2.2 创建app 24.2.3 安装Android模拟器 24.2.4 创建调试配置 24.3 运行app 24.4 设计真实的app 24.4.1 组织资源 24.4.2 配置app的Manifest文件 24.4.3 设计用户界面 24.4.4 编写Java代码 24.5 总结 24.6 问与答 24.7 测验 24.7.1 问题 24.7.2 答案 24.8 练习 附录A 使用NetBeans IDE A.1 安装NetBeans A.2 创建新项目 A.3 创建新的Java类 A.4 运行应用程序 A.5 修复错误 附录B Java资源 B.1 可以考虑的其他书 B.2 Oracle公司的 Java官方站点 B.3 其他Java站点 B.3.1 本书英文版的配套网站 B.3.2 Café au Lait B.3.3 Workbench B.3.4 Java 7 Developer Blog B.3.5 其他Java博客 B.3.6 InformIT B.3.7 Stack Overflow B.3.8 Java Review Service B.3.9 JavaWorld杂志 B.3.10 Developer.com’s Java Directory 附录C 本书站点 附录D 设置Android开发环境 D.1 起步 D.2 安装Eclipse D.3 安装 Android SDK D.4 安装在Eclipse中使用的Android插件 D.5 设置你的手机 其他 版权

Java初级教程

Java入门经典
第15章 响应用户输入

本章介绍如下内容:

让程序感知事件;

设置组件,使其引发事件;

忽略一些事件;

找出程序中事件的结束点;

存储界面中的信息;

准换存储在文本框中的值。

在前两章开发的图形用户界面无须任何修改就能独立运行。用户可以单击按钮,在文本框输入文本,调整窗口大小。然而,即使最没有识别能力的用户迟早也会提出更多的需求,因此程序提供的图形用户界面必须响应鼠标单击和键盘输入。

如果Java程序能够响应用户事件,就可以实现上述功能。响应用户事件通常称为事件处理,这是本章要介绍的主题。

15.1 让程序监听

在Java中,用户事件是这样定义的:当用户使用鼠标、键盘或其他输入设备执行某种操作时,所引发的行为。

在接收事件之前,必须知道如何让对象监听。要响应用户事件,必须使用一个或多个EventListener接口。接口是Java面向对象编程的一个特性,能够让类继承原本无法使用的行为。接口很像与其他类签订的合同,用来确保类包含具体的方法。

EventListener接口包含的方法可以接受特定类型的用户输入信息。

要添加EventListener接口,必须完成两项工作。首先,监听类位于java.awt.event包中,因此必须通过下面的语句使其在程序中可用:

其次,必须使用关键字implements将类声明为支持一个或多个监听接口。下面的语句创建一个这样的类,即使用ActionListener接口来响应按钮和菜单单击:

EventListener 接口让图形用户界面中的组件引发用户事件。如果没有一个监听者,组件将不能做任何让程序的其他部分能够知道的事情。程序中每个要监听的组件都必须有监听者接口。要让程序响应用鼠标单击按钮或在文本框中按回车键,必须包括ActionListener接口。要对用户选择列表或复选框进行响应,需要使用ItemListener接口。

在同一个类中需要多个接口时,可在关键字implements的后面列出接口名,并用逗号将它们隔开,如下列代码所示:

15.2 设置要监听的组件

为组件实现所需的接口后,还必须设置该组件使其生成用户事件。ActionListener接口监听操作事件,比如单击按钮或按下回车键。要让 JButton 对象引发一个事件,可使用addActionListener( )方法,如下所示:

这段代码创建按钮 fireTorpedos,然后调用其 addActionListener( )方法。通过将 this 关键字作为参数传递给 addActionListener( )方法,指出当前对象将接收用户事件并在需要时进行处理。

注意:

很多读者在第一次接触到this关键字时,并不懂它的含义。关键字this指的是其所在的对象。因此,如果创建一个LottoMadess类,并在一条语句中使用this,则它指的是执行该语句的LottoMadess对象。

15.3 处理用户事件

当有监听者的组件引发用户事件时,将自动调用一个方法,该方法位于将监听者同组件关联起来时指定的类中。

每个监听者有不同的方法,用于接受其事件。ActionListener接口将事件发送给方法action Performed( )。下面是一个简短的 actionPerformed( )方法示例:

程序中所有的操作事件都将发送给该方法。如果程序只有一个组件可以发送操作事件,可以将处理事件的语句放在该方法中。如果程序有多个组件可以发送操作事件,则需要指定发送事件的对象。

在这种情况下,需要将一个 ActionEvent 对象传递给 actionPerformed( )方法。有几种对象用于表示程序中发送的事件,这些类包含可用于判断事件由哪个组件引发的方法。在actionPerformed( )方法中,如果 ActionEvent 对象名为 event,可使用下面的语句来确定引发事件的组件:

GetActionCommand( )方法返回一个字符串。如果引发事件的组件是按钮,返回的字符串将是该按钮的标签;如果是文本框,返回的字符串为文本框包含的文本。GetSource( )方法返回引发事件的对象。

可以使用下面的 actionPerformed( )方法来接收来自 3 个组件的事件:名为 start 的 JButton对象、名为speed的JTextField对象和名为viscosity的JTextField对象:

通过使用 getSource( )方法,可以确定引发任何事件的对象。

15.3.1 复选框和组合框事件

复选框和组合框需要 ItemListener接口。调用组件的 addItemListener( )方法使其生成用户事件,例如,下面的语句创建一个名为superSize的复选框,并使其被选中或取消选中时引发用户事件:

这些事件由 itemStateChang( )方法接收,该方法将一个 ItemEvent对象作为参数。要确定事件是由哪个对象引发的,可使用事件对象的 getItem( )方法。

要确定复选框是否被选中,可使用方法 getStateChange( )及常数 ItemEvent.SELECTED和ItemEvent.DESELECTED。下面是一个例子:

要确定 JComboBox 对象中选定的值,可使用 getItem( )方法并将返回值转换为字符串,如下所示:

15.3.2 键盘事件

当一个键按下,程序需要立即做出响应时,它使用的是键盘事件和KeyListener接口。

第一步是调用组件的 addKeyListener( )方法,注册接收按键事件的组件。该方法的参数应为实现KeyListener接口的对象,如果是当前类,可使用this作为参数。

处理键盘事件的对象必须实现以下3个方法。

void keyPressed(KeyEvent):按下键时调用该方法。

void keyReleased(KeyEvent):松开键时调用该方法。

void keyTyped(KeyEvent):按下并松开键时调用该方法。

其中每个方法都将一个 KeyEvent 对象作为参数,可以调用该对象的方法来更详细地了解事件。调用 getKeyChar( )方法可确定按下的是哪个键,这是通过返回一个字符来指出的,且只适用于字母、数字和标点符号。

要监视键盘上的每个键,包括回车键、Home 键、Page Up 键和 Page Down 键,可调用getKeyCode( )方法。该方法返回一个代表键的整数,然后可以将该整数作为参数调用getKeyText( )方法,从而返回一个包含键名(如 Home、F1 等)的 String 对象。

程序清单15.1 所示的Java 应用程序使用getKeyChar( )方法在标签上显示最近按下的键。该应用程序实现了 KeyListener 接口,因此包含方法 keyTyped( )、keyPressed( )和keyReleased( ),但只在第 21~24 行实现了 keyTyped( )方法。创建一个名为 KeyViewer 的 Java文件,然后输入程序清单15.1中的全部文本,并保存。

程序清单 15.1 KeyView.java 的完整源代码

运行该程序时,其输出结果应该如图15.1所示。

图15.1 在程序中处理键盘事件

15.3.3 启用和禁用组件

读者可能在程序看到过与众不同的组件,它呈灰色。

灰色表示用户不能对组件执行任何操作,因为它被禁用。要在程序运行时启用和禁用组件,可以调用组件的 setEnabled( )方法,并将一个布尔值作为参数传递给它,因此 setEnabled (true)启用组件,而setEnabled(false)禁用组件。

下面的语句创建3个按钮(它们的标签分别是Previous、Next和Finish)并禁用第一个按钮:

这将禁止组件发送用户事件。例如,编写Java应用程序,通过文本框接收用户地址时,可能希望用户在提供街道地址、城市、州名以及ZIP编码之前,禁用Save按钮。

15.4 完善图形应用程序

为了理解如何在Java程序中使用Swing的事件处理类,这里将完善第14章介绍过的摇奖模拟程序LottoMadness。

当前,LottoMadness只是一个图形用户界面。用户可以单击按钮或在文本框中输入文本,但没有任何响应。这里将创建一个LottoEvent类,它接收用户输入、进行摇奖并记录用户中奖的次数。编写好这个类后,需要在LottoMadness中添加几行代码,以便使用LottoEvent。通常以这种方式划分Swing项目:将图形用户界面放在一个类中,将事件处理方法放在另一个类中。

该应用程序旨在评估用户一生中赢六合彩的几率。图15.2是该程序运行时的屏幕截图。

图15.2 运行程序LottoMadness

这里没有使用概率论来解决这个问题,计算机使用了一种更有趣的解决方法:它不断摇奖,直到用户中奖。由于6个数全中几乎不可能,用户猜对其中的3个、4个和5个数时,程序也将报告。

在创建的界面中,包含用于显示六合彩号码的 12 文本框和两个标签分别为 Quick Pick和Personal的复选框。其中有6个文本框是不能输入的,它们用于显示每次摇出的中奖号码;其他 6 个文本框显示用户选择的号码。当用户选中 Quick Pick 复选框时,将为用户随机显示6个数字;如果选中复选框Personal,则用户可以选择所需要的数字。

3 个按钮用于控制程序:Stop、Play 和 Reset。用户单击按钮 Play 时,程序将调用线程playing,并生成中奖号码。

用户按下Stop按钮时,线程停止,再按下Reset按钮将清除所有的文本框,以便开始新一轮游戏。第19章将详细讲解线程。

LottoEvent类实现了3个接口:ActionListener、ItemListener和Runnable。Runnable接口与线程相关。该程序需要一个接听者来监听由应用程序的按钮和复选框生成的用户事件,但是它不需要监听与文本框相关的任何事件,因为这些文本框只用于存储用户选择的数字。用户界面将自动处理这种存储功能。

这个类需要使用 Java 类库中的两个包:主 Swing 包 javax.swing 和 Java 事件处理包java.awt.event。

这个类包含如下两个实例变量。

gui:一个LottoMadness对象。

playing:用于不断摇奖的Thread对象。

变量gui用于同包含图形用户界面的LottoMadness对象通信。当需要修改界面或检索文本框中的值时,需要使用gui对象的实例变量。

例如,LottoMadness的实例变量play代表Play按钮,要在LottoEvent中禁用该按钮,可使用下面的语句:

下面的语句可用于检索JTextField对象got3的值:

程序清单 15.2 列出了 LottoEvent 类的全部源代码。在 NetBeans 中创建一个名为 Lotto Event的Java空文件,然后输入程序清单15.2中的所有文本,并保存。

程序清单 15.2 LottoEvent.java 的完整源代码

LottoEvent类有一个构造函数:LottoEvent(LottoMadness),它将LottoMadness对象作为参数,这表明要依靠LottoEvent来处理用户事件和进行摇奖。

在这个类中使用下述方法来完成具体的任务。

clearAllField( )方法清空应用程序中所有的文本框,它在用户单击Reset按钮时被调用。

addOneToField( )方法将文本框的内容转换为整数值,将其加 1 后再转换为字符串并存储到文本框中。由于所有的文本框存储的都是字符串,要将其作为数字使用,必须采取特殊措施。

numberGone( )方法接受 3 个参数——已摇出的一个数字、可存储多个 JTextField 对象的数组和一个计数器。该方法确保中奖号码不包含相同的数字。

matchedOne( )方法接受 2 个参数——一个 JTextField 对象和一个包含 6 个 JTextField对象的数组。该方法检查用户选中的某个数是否与当前中奖号码中的数字相同。

应用程序的actionPerformed( )方法接收用户单击按钮时引发的事件。getActionCommand( )方法检索按钮的标签,以确定哪个按钮被单击。

单击 Play 按钮将调用 startPlaying( )方法,该方法禁用 4 个组件。单击 Stop 按钮将调用stopPlaying( )方法,该方法启用除 Stop 按钮外的所有组件。

ItemStateChanged( )方法接受用户选择复选框 Quick Pick 和 Personal 时触发的事件。getItem( )方法返回一个对象,指出哪个复选框被单击。如果是复选框 Quick Pick,则为生成 6个1~50的随机数,作为用户选择的彩票号码;否则清空用户用来输入号码的文本框。

LottoEvent类使用1~50的数字表示摇出的小球。这是在第113行完成的,它将方法Math. random( )返回的值乘以 50 再加1,并将结果作为 Math.floor( )方法的参数,最终得到一个 1~50的随机整数。如果将这里和第65行的50替换为其他数字,可将LottoMadness用于进行更大或更小范围的摇奖模拟。

LottoMadness项目没有使用变量来记录摇出的号码、中奖次数和文本框中的彩票号码。相反,它使用界面来存储值并自动显示它们。

为完成该项目,在NetBeans中重新打开LottoMadness.java文件。只需要添加6行代码就可以使用LottoEvent类。

首先使用下面的语句添加一个新的实例变量,用于存储LottoEvent对象:

接下来在构造函数 LottoMadness( )中,对于每个可接受用户输入的界面组件,调用其方法 addItemListener( )和 addActionListener( ):

程序清单15.3列出了修改之后的LottoMadness.java的完整源代码。其中新增的代码用黑色阴影表示,其他代码与前一章相同。

程序 15.3 LottoMadness.java 的完整源代码

在添加完阴影显示的代码行之后,可以运行该程序,它可以测试你玩彩票的技能。正如读者预期的,这种练习毫无意义,因为在一生中赢得六合彩的机会非常小,即使你活得和圣经中的人物一样长。

提示:

本书的配套网站www.java24hours.com包含了applet版本LottoMadness程序的链接。本书付印时,摇了410732244次奖,这相当于39000000年(每两周摇一次)。其中6个数字中猜对3个的有6364880次,猜对4个有337285次,猜对 5 个的有 6476 次,全部猜对的有 51 次。Bill Teer于 2000 年 8 月14日中了该虚拟六合彩,这是在这个applet在网上发布后的4年多之后发生的。他的中奖号码是3、7、1、15、34和43,是在下了241225注(相当于2319.47年)后中的。

15.5 总结

通过使用Swing,只需进行少量的编程就可以创建专业级程序。虽然应用程序LottoMadness比前14章创建的很多示例程序都长,但有一半语句是用于创建界面的。

如果花些时间运行该程序,将更加羡慕六合彩得主的好运气。

我最近运行该程序的结果表明,我挥霍27000美元和人生中美好的266年买奖票,却只有几注是6中4和6中3的。与这样的几率相比,通过选择Java编程技能来赚钱无疑更现实。

15.6 问与答

问:为反映文本框变化,需要使用方法 paint( )或 repaint( )吗?

答:使用文本组件的 setText( )方法修改其值后,什么也不需要做。Swing 负责处理必要的更新,以显示新的值。

问:为何经常同时导入一个包及其子包,例如,在程序清单 15.1 中导入 java.awt.*和java.awt.event.*。难道第一条语句没有覆盖第二条吗?

答:虽然从名称上看,java.awt和java.awt.event是相关的,但在Java中包是不能继承的。一个包不可能是另一个包的子包。

在import语句中使用星号实际上是将包中所有的类导入。

星号只适用于类而不适用于包,因此单条import语句最多只能导入单个包中的所有类。

15.7 测验

如果 LottoMadness 程序激起了你玩游戏的热情,请回答下列问题以检测玩游戏的技能。

15.7.1 问题

1.操作事件因何而得名?

a.它们因响应其他事情而发生。

b.表示为响应而采取某种操作。

c.对电影中的冒险家 Action Jackson表示敬意。

2.作为方法AddActionListener( )的参数时,this 表示什么?

a.有事件发生时,应使用该监听者。

b.该事件优先于其他事件。

c.该对象将处理事件。

3.下面哪个组件将用户输入作为整数存储?

a.JButton。

b.JTextField或JTextArea。

c.都不是。

15.7.2 答案

1.b.操作事件包括单击按钮和从下拉菜单中选择一个菜单项。

2.c.关键字 this 表示当前对象。如果使用的是对象名而不是关键字 this,该对象将接收并处理事件。

3.c.JTextField和JTextArea组件都将其值存储为文本,因此要将其值作为整数、浮点数或其他非文本值使用时,必须进行转换。

15.8 练习

如果本章的主要事件没有满足你的胃口,请完成下列练习:

在应用程序 LottoMadness 中添加一个文本框,它与 LottoEvent 类的 Thread.sleep( )协同工作,以降低摇奖速度;

修改LottoMadness项目,使其摇出5个1~90的数字。

有关为完成这些练习而编写的Java程序,请访问本书的配套网站www.java24hours.com。

没有精选讨论主题。

全部讨论主题 查看精选主题

没有讨论主题。
😃 😅 😆 😁 😂 😊 😄 😠 😩 😲 😞 😵 😰 😒 😍 😤 😜 😝 😋 😘 😚 😷 😳 😢 😭 😨 😣 😡 😌 😖 😔 😱 😪 😏 😓 😥 😫 😉 👊 👍 👆 👇 👈 👉 👋 👏 👌 👎 👐 💓 💔 💕 💖 💗 💘 💙 💚 💛 💜 💝 💞 💟