目录
第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入门经典
第13章 创建简单的用户界面

本章介绍如下内容:

创建按钮这样的用户界面组件;

创建标签、文本框和其他组件;

将组件编组;

将组件放在其他组件中;

打开和关闭窗口。

在本章,所有的事情将变得繁琐起来。读者在使用Java创建第一个图形用户界面(GUI)时,将会面临很大的一个烂摊子。

计算机用户期望其软件有图形用户界面、通过鼠标接受用户的输入并像其他程序那样工作。尽管有些用户仍然希望在命令行环境下(比如 MS-DOS 或 Linux shell)工作,但是大多数用户会非常不适应不提供点选、拖放图形界面的软件。

Java通过使用Swing来支持这种类型的软件,Swing是Java类的集合,它可以表示所有不同的按钮、文本框、滑块,以及可以成为GUI一部分的其他组件,同时它还包括了可以从上述组件中接收用户输入的类。

13.1 Swing 和抽象窗口工具包

Java 是一种跨平台语言,使用它可以为很多不同的操作系统编写程序,因此其图形用户软件必须是灵活的,不仅能够支持Windows和Mac窗口风格,还必须能够满足其他平台的要求。

在 Java 中,使用两组类来开发程序的用户界面:Swing 和抽象窗口工具包(Abstract Windowing Toolkit,AWT)。这些类让你能够创建图形用户界面以及接收用户输入。

Swing提供了编写使用图形用户界面的程序所需的一切。使用Java的用户界面类,可以创建包括下述元素的GUI:

按钮、复选框、标签和其他简单组件;

文本框、滑块和其他复杂组件;

下拉菜单和弹出菜单;

窗口、框架、对话框和applet窗口。

13.2 使用组件

在Java中,图形用户界面的每部分都由Swing包中的一个类表示。对于按钮,是JButton类,窗口是JWindow类,文本框是JTextField类等。

为创建并显示界面,需要创建对象,设置其变量并调用其方法。使用的技巧与前面介绍面向对象编程的三章中相同。

组织图形用户界面时,需要使用两类对象:组件和容器。组件是用户界面中的独立元素,如按钮或滑块;容器是用于容纳其他组件的组件。

创建界面的第一步是创建能够容纳组件的容器。在应用程序中,该容器通常是窗口或框架。

13.2.1 窗口和框架

窗口和框架是能够在用户界面上显示,并且可以容纳其他组件的容器。窗口是一种简单容器,不像常规图形用户界面那样,在顶端有标题栏和其他按钮。框架是一种这样的窗口:包含用户运行软件时希望看到的所有常见的窗口特性,如关闭按钮、最大化按钮和最小化按钮。

这些容器分别是使用Swing包中的JWindow和JFrame类创建的。为了在Java程序使用Swing包,可使用下面的语句:

一种在Java应用程序中使用框架的方法是,将应用程序声明为JFrame的子类,这样应用程序将继承作为框架所需的行为。下面的语句创建了JFrame的一个子类:

这个类创建了一个框架,但没有完整地设置。创建框架时,必须在框架的构造函数中执行几种操作:

调用超类JFrame的构造函数;

设置框架的标题;

设置框架的大小;

设置框架的外观;

定义用户关闭框架时应执行的操作。

还必须显示框架,除非由于某种原因,在应用程序开始运行时不应显示框架。

所有这些操作都可以在框架的构造函数中完成。该方法首先应使用关键字 super 调用JFrame的一个构造函数。下面是一个例子:

该语句调用不接受参数的 JFrame 构造函数。也可以调用将框架标题作为参数的构造函数:

这将框架的标题设置为指定的字符串,标题出现框架顶端的标题栏中。在这里,标题为Main Frame。

如果不采用这种方式设置标题,可以调用框架的setTitle( )方法,并将一个字符串作为参数:

要指定框架的大小,可调用 setSisze( )方法并指定两个参数:宽度和高度。下面的语句将框架设置为宽350像素,高125像素:

设置框架大小的另一种方式是,先用组件填充它,然后调用不带参数的 pack( )方法,如下例所示:

方法 pack( )根据框架中每个组件的首选尺寸来设置框架。每个界面组件都有首选尺寸,虽然有时会忽略首选尺寸,这取决于组件在界面中是如何排列的。调用 pack( )方法前,无需显式地设置框架的大小,该方法在框架显示前将其设置为足够大。

每个框架的标题栏上都有一个用于关闭框架的按钮。在Windows系统中,该按钮出现在框架的右上角并用“X”标识。要定义单击该按钮发生的情况,可调用框架的setDefaultClose Operation( )方法,并将 4 个 JFrame 类变量之一作为参数。

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):按钮被单击时退出程序。

SetDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE):关闭框架并销毁框架对象,但应用程序继续运行。

SetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE):让框架打开并继续运行。

SetDefaultCloseOperation(JFrame.HIDE_ON_CLOSE):关闭框架并继续运行。

当使用Swing创建了图形用户界面时,可以对它的外观进行自定义,从而控制按钮和其他组件的显示方式和行为。

Java 7 中引入了增强的外观,名为 Nimbus,当时在类中使用时,必须先启用。通过调用主 Swing 包中 UIManager 类的 setLookAndFeel( )方法可以设置外观。该方法接受一个参数:外观类的完整名称。

下面的语句将Nimbus设置为外观:

最后要做的一件事情是显示框架:使用 true 作为参数调用 setVisible( )方法:

这将以指定的宽度和高度打开框架。也可以用 false 作为参数调用该方法,以隐藏框架。

程序清单 13.1 包含本节介绍的源代码,在 Java 空文件中输入这些语句并将文件保存为SalutonFrame.java。

程序清单13.1 SalutonFrame.java程序

在程序清单 13.1 中,第 22~24 行包括了一个 main( )方法,它使该框架类变为一个应用程序。当运行该程序时,将会看到图13.1所示的框架。

图13.1 在应用程序中显示框架

程序 SalutonFrame 只是显示一个标题:世界语问候“Saluton mondo!”。该框架是一个空窗口,因为它没有包含任何组件。

要在框架中添加组件,必须创建组件并将其加入到容器中。每个容器都有一个 add( )方法,该方法接受一个参数:要显示的组件。

SalutonFrame 类包含一个 setLookAndFeel( )方法,它可以将 Nimbus 指定为框架的外观。代码第 14~16 行调用了 UIManager 类的这个 setLookAndFeel( )方法来实现该目的。

调用该方法的语句放置在 try-catch 语句块中,从而可以处理有可能发生的错误。try 和catch语句在前面一直没有介绍,因此对读者来说还较为陌生。使用这些语句来处理错误的知识将在第18章详细讲解。

此时,你只需要知道调用 UIManager.setLookAndFeel( )方法可以设置 GUI 的外观即可。如果调用该方法时发生了错误,程序将显示其默认的外观,而不是Nimbus。

13.2.2 按钮

可以添加到容器中的一种简单组件是JButton对象。JButton和本章介绍的其他组件一样,也位于java.awt.swing包中。JButton对象是一个可单击的按钮,其标签描述了单击按钮的结果。该标签可以是文本、图像或两者的组合。下面的语句创建一个名为 okButton 的 JButton对象,并将其标签设置为OK:

创建 JButton 等组件后,应调用 add( )方法将其加入到容器中:

在容器中添加组件时,不需要指明组件在容器中显示的位置,组件的布局由被称为布局管理器的对象决定。最简单的布局管理器是FlowLayout类,它位于java.awt包中。

要让容器使用特定的布局管理器,必须首先创建该布局管理器的对象。使用下面这样的语句创建FlowLayout对象:

创建布局管理器后,调用容器的 setLayout ( )方法将其管理器同容器关联起来,该方法将布局管理器对象作为唯一的参数,如下例所示:

这条语句将 f lo 对象指定为容器 pane的布局管理器。

接下来要创建的应用程序为Playback类,它可以显示一个包含3个按钮的框架。在一个Java空文件中输入程序清单13.2中的所有文本,然后保存。

程序清单13.2 Playback.java的完整源代码

Playback程序在代码第10行创建了一个FlowLayout布局管理器,并在代码第11行将其用于框架。当在代码第15~17行将3个按钮添加到框架中时,它们将由该布局管理器进行安置。

当运行该程序时,其输出结果应该如图13.2所示。用户可以单击其中的每个按钮,但什么也不会发生,因为该程序没有包含任何接收用户输入的方法,这种方法将在第15章介绍。

图13.2 在GVI上显示按钮

可以通过这种方法将多个Swing用户组件添加到容器中。

注意:

本章将介绍很多不同种类的用户界面组件,这里将不会列出创建每个组件的源代码。读者可在本书的配套网站 www.java24hours.com 找到本章所有程序的源代码。

13.2.3 标签和文本框

JLable组件显示用户不能修改的信息,这种信息可以是文本、图形或两者的组合。这些组件常用于标识界面中的其他组件,因此而得名。它们常用于标识文本框。

JTextField组件是用户可以输入单行文本的区域。创建文本框时,可以设置其宽度。

下面的语句创建一个JLable组件和一个JTextField对象,并将它们加入到容器中:

图13.3并排地显示该标签和文本框。这里的两条语句都使用一个参数来设置组件的外观。

图13.3 显示标签和文本框

标签 pageLabel 的文本被设置为“Web page address:”,并使用了参数 JLabel.RIGHT。该参数将文本与标签右对齐,JLabel.LEFT将文本左对齐,而JLabel.CENTER居中显示文本。用于JTextField的参数指定文本框的宽度为20个字符,也可以使用下面这样的语句指定显示在文本框的默认文本:

该语句创建一个JTextField对象,其宽度为20个字符,且内容默认为“US”。

对象包含的文本可使用方法 getText( )来检索,它返回一个字符串:

读者可能猜到了,也可以使用相应的方法来设置文本:

13.2.4 复选框

JCheckBox 组件由文件和方框组成,用户可以选中它,也可以不选中。下面的语句创建一个JCheckBox对象并将其加入到一个容器中:

构造函数 JCheckBox( )的参数指定了显示在复选框旁边的文本。如果要选中该复选框,可使用下面的语句:

JCheckBox 可以单个显示,也可以编成组。在一组复选框中不能同时选中多个。要使JCheckBox对象成为某个组的一部分,必须创建一个ButtonGroup对象,请看下面的语句:

上述语句创建了3个复选框,并将它们都编组到名为meals的ButtonGroup对象下。默认情况下,复选框 Frog Leg Grande被选中,但如果用户选择其他复选框,复选框 Frog Leg Grande的选中标记将消失。图13.4显示了本节介绍的复选框。

图13.4 显示复选框组件

13.2.5 组合框

JComboBox组件是一个弹出式选择列表,也可以设置成能够接收文本输入。在这种情况下,用户可以使用鼠标选中列表项,也可以使用键盘来输入文本。组合框有点像一组复选框,但在没有打开列表时,只能看见其中的一个选项。

要创建JComboBox对象,必须在创建这种对象后加入每个选项,如下例所示:

该示例创建一个 JComboBox 组件,其中包含 6 个可供用户选择的选项。被选中的选项出现在该组件的可视区域。图13.5显示了弹出式列表被打开时的情况。

图13.5 显示组合框组件

要让JComboBox组件能够接收文本输入,必须使用true作为参数调用其setEditable( )方法,如下面的语句所示:

必须在将组件加入到容器中之前调用该方法。

13.2.6 文本区域

JTextArea组件允许用户输入多行文本,你可以指定该组件的宽度和高度。下面的语句创建一个JTextArea组件,其宽度大约为40个字符,高度为8行,然后将该组件加入到容器中:

图13.6显示了将该组件加入到框架中的情况。

图13.6 显示文本区域组件

可以在构造函数 JtextArea( )中指定要在文本区域显示的字符串,可以使用换行符“\n”进行换行,如下所示:

警告:

文本区域组件的行为可能与读者预期的不同:用户达到文本区域底部时,它自动增大,文本区域的底部和右边没有滚动条。要实现类似于其他窗口软件中的文本区域,必须将文本区域放在被称为滚动窗格的容器中,这将在第16章介绍。

13.2.7 面板

本章要介绍的最后一种组件是面板,它是使用Swing中的JPanel类创建的。JPanel对象是可在Swing界面中使用的最简单的容器,用于将显示区域划分成不同的容器组。将显示区域分成几部分后,可以采用不同的规则来组织每个部分。

可使用下面的语句来创建JPanel对象并将其加入到容器中:

面板常用于排列界面中的组件,这将在第14章介绍。

通过调用面板的 add( )方法可以将组件添加到面板中。还可以通过调用 setLayout( )方法,直接给面板指定布局管理器。

当需要在界面包含绘画区域(如显示图像文件中的图像)时,也可以使用面板。

JPanel的另一种用途是,用于创建可加入到其他类中的组件,这将在本章后面介绍。

13.3 创建自己的组件

面向对象编程的一个主要优点是,能够在不同的项目中重用类。在接下来的程序中,读者将创建一个特殊的面板组件,可在其他Java程序中重用它。该组件名为ClockPanel,它像第7章的ClockTalk程序那样,显示当前的日期和时间。

创建用户界面组件的第一步是,确定继承哪个现有组件。ClockPanel组件是JPanel的子类。

程序清单13.3定义了ClockPanel类,这是一个面板组件,包含一个显示当前日期和时间的标签。

在一个新的Java空文件中输入程序清单13.3中的全部文本,并保存。

程序清单13.3 ClockPanel.java完整的源代码

ClockPanel程序的 getTime( )方法检索当前日期和时间,使用的技巧与第 7 章的应用程序ClockTalk相同。在第15行声明该方法时,带有final关键字:

该方法使用了 final 关键字后可以防止它被子类中的方法覆盖。作为 GUI 组件,这对ClockPanel是必须的。

第6~13行的构造函数创建面板,具体情况如下。

第 8 行:调用 getTime( )方法来检索当前日期和时间,并将返回的值存储在字符串变量currentTime中。

第9行:创建一个名为time的新标签,并将其文本设置为“Time:”。

第10行:将currentTime用作标签组件current的文本。

第 11 行:调用面板的 add( )方法并将标签 time 作为参数,从而将其加入到面板中。

第12行:以相同的方式将current标签加入到面板中。

为测试该面板,创建应用程序ClockFrame,其代码如程序清单13.4所示。

程序清单13.4 ClockFrame.java的完整源代码

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

图13.7 显示 ClockPanel组件

13.4 总结

用户期望其运行的程序有可指向并单击的可视化界面,这希望给创建软件提出了更严峻的挑战,Java通过Swing向程序员提供了这种功能。Swing提供了创建可运行的GUI所需的所有类,不管用户在哪种操作系统中运行Java程序。

下一章将介绍如何使用布局管理器来设计图形用户界面,布局管理器是用于指定如何在容器排列组件的类。

13.5 问与答

问:如果没有给容器指定布局管理器,组件将如何排列?

答:在简单容器(如面板)中,默认使用FlowLayout来排列组件,组件像在页面中显示单词那样被加入到容器:从左到右排列,当前行没有空间后进行下一行,再按从左到右的顺序排列。下一章将讲到,框架、窗口和applet默认使用GridLayout布局。

问:为什么很多图形用户界面的类的名字都以J打头,比如JFrame和JLabel?

答:这些类都属于Swing框架,该框架是Java类中第二种可包含图形用户界面类的方式。抽象窗口工具包(AWT)是第一种方式,它的类名要更为简单,比如Frame和Label。

AWT类属于java.awt包及其相关包,而Swing属于javax.swing包和相关包,因此它们有相同的类名。只所以在名字面前使用字母J是为了对两者进行区分。

Swing类也称之为Java基础类(JFC)。

13.6 测验

经过本章的艰苦学习,如果读者的头脑还没有变成GUI碎片,请回答下列问题以测试自己的技能。

13.6.1 问题

1.下列哪种用户组件可用作容纳其他组件的容器?

a.TupperWare。

b.JPanel。

c.Choice。

2.在容器中必须首先做下面哪项工作?

a.指定布局管理器。

b.添加组件。

c.无关紧要。

3.哪个方法决定如何在容器中排列组件?

a.setLayout( )。

b.setLayoutManager( )。

c.setVisible( )。

13.6.2 答案

1.b.可以在面板中添加组件,然后将面板加入到其他容器中,如框架。

2.a.必须在添加组件前指定布局管理器,这样才能正确地加入组件。

3.a.方法 setLayout( )接受一个参数,即决定如何排列组件的布局管理器对象。

13.7 练习

为更深入地理解GUI设计,请完成下面的练习:

修改应用程序 SalutonFrame ,使其在框架的主要区域而不是标题栏中显示文本“Saluton Mondo!”;

创建一个包含另一个框架的框架并同时显示它们。

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

没有精选讨论主题。

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

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