目录
第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入门经典
第16章 创建复杂的用户界面

本章介绍如下内容:

水平和竖直滚动组件;

使用滑块输入数值;

监视用户通过滑块进行的输入;

创建图像图标和工具栏。

使用 Swing 创建图形用户界面时,除学习如何使用不同的界面组件、布局管理器和事件处理方法外,还必须熟悉Swing提供的所有功能。

Swing包含400多个不同的类,这使其成为Java中的最大类库。其中的很多类可用前三章介绍的技术来实现——所有Swing容器和组件有相同的超类,这使它们的行为相同。

本章将介绍可在Swing程序中使用的其他组件。

16.1 滚动窗格

图形用户界面中的组件常常大于用于显示它们的区域,要从组件的一部分移动到另一部分,可使用垂直和水平滚动条。

在 Swing 中,通过将组件加入到滚动窗格中来提供滚动功能。滚动窗格是一种容器,用Swing中的JSrollPane类表示。

可以使用下面的构造函数来创建滚动窗格。

JScrollPane( ):创建必要时显示垂直和水平滚动条的滚动窗格。

JScrollPane(int, int):创建包含指定的垂直和水平滚动条的滚动窗格。

JScrollPane(Component):创建包含指定用户界面组件的滚动窗格。

JScrollPane(Componernt, int, int):创建包含指定组件以及垂直和水平滚动条的滚动窗格。

在构造函数中使用整型参数指定如何在窗格中使用滚动条,可将使用下述类变量作为参数:

JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED 或 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED。

JScrollPane.VERTICAL_SCROLLBAR_NEVER 或 JScrollPane.HORIZONTAL_SCROLLBAR_NEVER。

JScrollPane.VERTICAL_SCROLLBAR_ALWAYS 或 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS。

如果创建了没有包含组件的滚动窗格,可以使用窗格的add(Component)方法来添加组件。设置好滚动窗格后,应将其像组件那样加入到容器中。

来看一个包含滚动窗格的应用程序,创建一个名为MailWriter的Java空文件,输入程序清单16.1中的文本文件,并保存。

程序清单 16.1 MailWriter.java 程序的完整源代码

运行该程序时,将看到图16.1所示的窗口。

图16.1 在应用程序中显示可滚动的文本区域

应用程序Mailwriter是一个用于编写电子邮件的图形用户界面,其中没有事件处理代码,因此无法对输入的数据执行任何操作。

电子邮件的文本被输入到一个滚动文本区域,后者是使用下面的语句实现的:

16.2 滑块

对用户来说,输入数字的最简单方法之一是使用滑块,这是一个可上下或左右拖曳的组件。在Swing中,滑块用JSilder类表示。

滑块用于从指定范围选择一个数字,这些值可显示在标签上,包括最小值、最大值和中间值(如图16.2所示)。

图16.2 使用3个滑块组件选择颜色

可使用下面的构造函数之一创建水平滑块。

JSlider( ):创建最小值为 0,最大值为 100,初始值为 50 的滑块。

JSlider(int, int):创建具有指定最小值和最大值的滑块。

JSlider(int, int, int):创建具有指定最小值、最大值和初始值的滑块。

要创建垂直滑块,必须使用接受另外一个附加参数(滑块方向)的构造函数,该参数应设置为类变量Jslider.VERTICAL或JSlider.HORIZONTAL。

下面的语句创建一个垂直滑块,可用于选择1~1000的数字:

在该滑块中,用于选择数字标记最初位于500处。

要在滑块上显示标签,必须设置标签包含的信息。调用滑块的 setMajorTickSpacing (int)和setMinorTickSpacing(int)方法指定标签上刻度的密度。主刻度使用的线条比次刻度粗。

在设置了刻度的密度之后,可以使用true作为参数来调用滑块的setPaintTicks(boolean)方法。还可以使用true作为参数来调用滑块的setPaintLabels(boolean)方法。

16.3 变更监听器

为了监视用户使用滑块进行的输入,必须有实现了ChangeListener接口的类,该接口位于javax.swing.event包中。该接口只包含一个方法,格式如下:

要将对象注册为变更监听器,可调用滑块所属的容器的 addChangeListener(Object)方法。滑块移动时,将调用监听对象的 stateChanged( )方法。

该方法将ChangeEvent对象作为参数,用于指出其值发生了变化的滑块组件。调用该对象的 getSource( )方法并将返回的对象转换为 JSlider,如下面的语句所示:

在本例中,evtent是 ChangeEvent 对象,用作方法 stateChanged( )的参数。

滑块移动时,将发生变更事件。该事件在滑块开始移动时发生,直到用户松开滑块为止。因此,可能要等到滑块停止移动后才调用 stateChange( )方法。

要确定滑块是否在移动,可调用其 getValueIsAdjusting( )方法。如果滑块在移动,该方法返回true,否则返回false。

接下来的项目将演示这种技巧,这是一个使用3个滑块来选择颜色的Java应用程序。在Java中,颜色是使用Color类创建的,这个类位于java.awt包中。

一种创建Color对象的方法是指定颜色中红、绿和蓝分量的值。每个值都可以是0~255的整数,255表示最大。

例如,下面的语句创建一个代表奶油糖色的Color对象:

创建该 Color 对象时使用的红色分量为 255,因此包含最大的红色分量。它还包含较大绿色分量和蓝色分量。

颜色也可表示为特定范围内的值,因此适合用滑块组件来表示。

程序清单16.2所示的ColorSlider应用程序包含3个滑块、用于标记滑块的3个标签以及一个用于显示颜色的面板。创建一个名为ColorSliders的Java空文件,然后输入程序清单16.2中的全部文本,并保存。

程序清单 16.2 ColorsSliders.java 程序的完整源代码

运行该程序时,将会如图16.2所示。其中,一个框架包含3个表示红、绿、蓝分量的滑块以及框架底部的面板。

调整每个滑块的值,以修改显示的颜色。在图 16.2 中,该应用程序用于创建 North Texas中间绿,其红色分量为50,绿色分量为150,蓝色分量为50。这种颜色激励北德克萨斯大学的学生和校友要超越自己,并做出可怕的鹰爪手势表示将恐惧留给对手。

16.4 使用图像图标和工具栏

为改善图形用户界面的视觉效果,最简单的一种方法是使用图标(小型图像)来标识按钮和界面的其他部分。

Swing 类库中有很多组件,可以使用图像(而不是文本)来标记组件,为此可使用javax.swing包中的ImageIcon类。

可以通过调用构造函数ImageIcon(String),使用计算机中的文件来创建ImageIcon。该方法的参数可以是文件名,也可以是文件的位置和名称,所下面的示例所示:

警告:

尽管有些操作系统使用字符\来分隔文件夹和文件名,但ImageIcon的构造函数要求使用字符/。

用于创建图像图标的图形文件必须为GIF、JPEG或PNG格式。大多数为GIF格式,因为它非常适合用于显示只有几种颜色的小图形。

ImageIcon的构造函数将立即从文件中加载整个图像。

可以通过调用构造函数 JLable (ImageIcon)和 JButton(ImageIcon),将图标用于标签和按钮,如下例所示:

有几种组件可同时包含图标和文本,下面的语句创建一个同时包含文本和图标的按钮:

图像图标经常用在工具栏中,工具栏是一种将多个组件放在单行或单列中的容器。

工具栏是使用JToolBar类创建的,可被设计为允许用户在图形用户界面中移动它们,这被称为“停靠”,而这种组件也称为“可停靠的工具栏”。

可以调用下面的构造函数之一来创建工具栏。

JToolBar( ):创建沿水平方向排列组件的工具栏。

JToolBar(int):创建沿指定方向排列组件的工具栏,指定的方向可以是SwingConstants. HORIZONTAL或SwingContants.VERTICAL。

将组件加入到工具栏的方式与加入到其他容器相同:调用add(Component)方法并将要加入的组件作为参数。

对于可停靠的工具栏,必须放在使用BorderLayout布局管理器的容器中。这种布局将容器划分为北、南、东、西、中5个区域。然而,在使用可停靠的工具栏时,容器应只使用其中的两个区域:中央区域和一个方向区域。

工具栏应加入到方向区域中,下面的语句创建一个可停靠的垂直工具栏,其中包含3个图标按钮:

接下来将创建的项目Tool 是一个Java 应用程序,它包含图像图标和一个可停靠的工具栏。创建一个名为Tool的Java空文件,然后输入程序清单16.3中的全部文本,并保存。

程序清单 16.3 Tool.java 程序的完整源代码

应用程序Tool需要3个图形文件用于创建工具栏中的图标:newfile.gif、openfile.gif和savefile.gif。从本书的配套网站www.java24hous.com中找到第16章的站点页面,然后下载这3个文件,并保存到Java24项目文件夹中(或者是你自己在NetBeans中指定的Java项目文件夹)。

提示:

没有找到这个文件夹?在 NetBeans 中打开一个新的项目:选择File->New File,在弹出的对话框中,将“分类(category)”设置为 Java,将“项目类型(project type)”设置为Java application,然后单击 Next 按钮。The Project Location文本框应该会包含文件夹(用来存放这些图标)的位置。

图16.3 和图16.4 是该程序运行时的两个屏幕截图,工具栏已从初始位置(见图16.3)移到界面的另一边(见图16.4)。

图16.3 使用包含工具栏的应用程序

图16.4 将工具栏停靠到其他位置

编译并运行该应用程序,然后尝试移动工具栏。按住工具栏的手柄将其拖曳到文本区域的另一边。松开鼠标后,工具栏将沿文本区域的边缘放置,而文本区域将自动调整位置为工具栏腾出空间。

注意:

也可以将可停靠的工具栏拖曳到用户界面外,这将打开一个包含工具栏的新窗口。

Oracle提供了一个图标库,可以在程序中使用这些图标。本章专题中使用的3个图标也来自这个图标库。要查看这些图形,可访问 http://java.sun.com/developer/ techDocs/hi/repository/。

16.5 总结

本章是介绍Swing的四章中的最后一章,Swing是Java语言中支持GUI软件的部分。

尽管Swing是Java类库的最大组成部分,但其中大部分类的用法相似。在知道如何创建组件、如何将组件添加到容器、如何设置容器的布局管理器及如何响应用户输入后,探索该语言时就能够使用众多新的Swing类。

16.6 问与答

问:如何了解Java类库中的其他Swing类?

答:在Oracle的Java官方网站中,有完整的Java类库文档,其网址为http://download.oracle. com/javase/7/docs/api。在这里可以查看前面4章介绍的javax.swing、java.swt和java.awt.event包中的类。所有Swing类和接口都有文档,包括它们的构造函数、类变量和实例变量。

16.7 测验

一分耕耘一分收获:回答下面有关滚动窗格、图像图标和其他Swing特性的问题,以锻炼你的大脑。

16.7.1 问题

1.ImageIcon类支持哪些图形文件格式?

a.GIF。

b.GIF和JPEG。

c.GIF、PNG和JPEG。

2.JSlider 对象的 getValueIsAdjusting( )方法有什么功能?

a.判断滑块的值是否改变?

b.判断滑块的值是否正在改变?

c.不做什么,提供该方法主要是对超类不满意。

16.7.2 答案

1.c.从 Java 1.3 开始,ImageIcon 开始支持 PNG 格式。

2.b.如果滑块正在移动,getValueIsAdjusting( )方法将返回 true,否则返回 false。

16.8 练习

为测试是否掌握了Swing,请完成下面的练习:

创建一个图形用户界面,在滚动窗格中包含一个组合框;

给应用程序 MailWriter 添加事件处理代码,当用户单击 Send 按钮时,使用System.out.println( )显示组件 to、subject 和 message 的内容。

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

没有精选讨论主题。

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

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