目录
第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入门经典
第23章 创建Java2D图形

本章介绍如下内容:

设置文本的字体和颜色;

设置容器的背景色;

绘制直线、矩形和其他图形;

绘制GIF和JPEG图形;

绘制填充形状和非填充形状。

在本章,读者将学到如何将Swing容器(存放GUI组件的纯黑色面板和框架)变成一块可以在上面绘制字体、颜色、形状和图形的艺术画布。

23.1 使用Font类

在Java中,颜色和字体使用java.awt包中的Color和Font类来表示。通过使用这些类,你可以用不同的字体和字号来显示文本,也可以改变字体和图形的颜色。字体使用构造函数Font(String, int, int)来创建,该构造函数接受 3 个参数:

字体的名字,它可以是描述性名字(比如Dialog、DialogInput、“Monospaced”、“San Serif”或“Serif”),也可以是实际的字体名(比如“Arial Black”、“Helvetica”或“Courier New”);

Font.BOLD、Font.ITALIC和Font.PLAIN这3个类变量中的其中一个;

字体的大小(字号),单位为磅。

下面的语句创建了一个Font对象,其字号为12磅,字体为Serif,样式为斜体:

如果你使用了一个指定的字体,而不是通用的字体,则该字体必须已经安装在运行程序的计算机中。你可以将字体样式合并起来,如下面的例子所示:

当有了字体之后,可以调用Graphicis2D组件的setFont(Font)方法,将其指定为当前字体。在没有指定其他新的字体之前,后续所有的绘制操作都将使用该字体。下面例子中的语句创建了“Comic Sans”字体对象,并在绘制文本之前将其指定为当前地体:

Java支持消除锯齿功能,因此可以更为平滑地绘制字体和图形,而且它们的外观具有较少的锯齿。为了启用这个功能,必须在 Swing 中设置渲染提示(rendering hint)。Graphics2D对象具有一个 setRenderingHint(int, int)方法,它可以接受两个参数:

渲染提示键(key);

与该键相关联的值。

这些值是位于java.awt包中的RenderingHints类的类变量。要启用消除锯齿功能,可使用两个参数来调用 setRenderingHint( )方法:

在该例子中,comp2D对象是Graphics2D对象,表示一个容器的绘制环境。

23.2 使用Color类

在Java中,颜色可使用Color类表示,其中包括如下常量:black、blue、cyan、darkGray、gray、green、lightGray、magenta、orange、pink、red、white和yellow。

在容器中,可以调用setBackground(Color)方法来设置组件的背景色,其中上面提到的颜色常量作为该方法的参数,如下例所示:

与当前的字体相同,在使用 setColor(Color)方法执行绘制任务之前,必选先设置当前的颜色。

在下面的代码中,一条语句将当前颜色设置为orange,并使用该颜色来绘制文本:

在使用 setBackground( )方法时,我们可以直接在容器上调用,但是 setColor( )则不行,我们必须在Graphics2D对象上调用该方法。

23.3 创建自定义颜色

在Java中,通过指定sRGB通用色彩标准的值,可以创建自定义颜色。sRGB使用颜色中的红、绿、蓝分量来定义颜色。每一种颜色的取值在0~255之间(0表示没有这种颜色, 255表示该颜色分量具有最大值)。

构造函数 Color(int, int, int)接口 3 个参数,这 3 个参数分别表示红、绿、蓝的值。下面的代码将绘制一个面板,该面板在暗红色(红:235;绿:50;蓝:50)背景中显示亮橙色(红:230;绿:220;蓝:0)文本:

该示例调用 Graphics2D的 fillRect( )方法使用当前颜色绘制一个填充的矩形。

注意:

通过使用sRGB值,可以创建1650万种颜色,不过大多数计算机显示器只能近似地显示其中的大部分颜色。

23.4 绘制直线和形状

在 Java 程序中,绘制直线和矩形这样的形状就像显示文本那样简单。你只需要一个Grphics2D对象来定义绘制平面和表示要绘制内容的对象即可。

Graphics2D对象有用来绘制文本的方法,如下所示:

这将在坐标点(15,40)位置绘制文本“Draw, Pardner!”。绘制直线的方法所使用的坐标系与绘制文本的方法使用的相同。(0, 0)坐标位于容器的左上角,当向右移动时,x 值增加,当向下移动时,y 值增大。通过使用下面的语句,可以确定 applet 能够使用的最大(x, y)值:

除了可以绘制直线以外,你还可以绘制填充的形状或者是未填充的形状。所谓填充形状就是绘制该形状时,使用当前颜色将该形状空间完全填充起来。而非填充的形状则是只使用当前的颜色绘制的形状的边界。

23.4.1 绘制直线

在创建一个对象的2D图形时,它表示的是正在绘制的形状。

定义形状的类位于java.awt.geom包中。

Line2D.Float 类能够创建一条连接起点(x, y)和终点(x,y)的直线。下面的语句将创建一条起点为(40,200),终点为(70,130)的直线:

注意:

Line2D.Float类与之前用到的大多数类不同,它的类名中间有一个句点。这是因为Float是Line2D类中的内部类。有关Float类的内容,请见第11章。

在上面的语句中,参数后面跟有字母F,用来指示参数是浮点型数值。如果省略该字母,则Java会把参数当作整型数值。

除了直线之外,调用 Graphics2D 类的方法还可以绘制其他形状:draw( )方法可以绘制轮廓线,而 fill( )方法可以绘制填充形状。

将下面的语句与上面的代码相结合,可以绘制出直线对象:

23.4.2 绘制矩形

矩形可以是填充或非填充的,还可以是圆角的或直角的。矩形可以使用构造函数Rectangle2D.Float(int, int, int, int)来创建,创建时指定如下 4 个参数:

矩形左上角的x坐标。

左上角的y坐标。

矩形的宽度。

矩形的高度。

下面的语句可以绘制一个非填充的直角矩形:

这条语句创建的矩形的左上角坐标为(245, 65),宽度为 20,高度为 10,宽度和高度都以像素为单位。要绘制该矩形的轮廓,可使用下面的语句:

要填充该矩形,可以使用 fill( )方法:

可以使用RoundRectangle2D.Float类来创建圆角矩形。

这个类的构造函数的前4个参数与Rectangle2D.Float类相同,并增加了下面2个参数:

水平方向上离矩形角的像素数;

垂直方向上离矩形角的像素数。

这些距离用于指定矩形圆角的起始位置。

下面的语句创建一个圆角矩形:

该矩形的左上角坐标为(10, 10)。第 3 个和第 4 个参数指定矩形的宽度和高度。在本例中,矩形的宽度给100像素,高度为80像素。

最后两个参数指定在矩形的4个角上,在离角点15像素处开始倒圆角。

23.4.3 绘制椭圆和圆

椭圆和圆是使用同一个类——Ellipse2D.Float创建的。这个类的构造函数接受4个参数:

椭圆的x坐标;

椭圆的y坐标;

椭圆的宽度;

椭圆的高度。

读者可能已经猜到,(x, y)坐标不是椭圆或圆的圆心。相反,(x, y)坐标、宽度、高度描述了椭圆的外接矩形,(x, y)是该矩形的左上角坐标。如果宽度和高度相同,椭圆将变成圆。

下面的语句创建一个圆,其外接矩形的左上角坐标为(245, 45),宽度和高度都是5像素:

23.4.4 绘制弧线

在Java中可绘制的另一个圆形形状是弧线,它是椭圆或圆的一部分。弧线用Arc2D.Float类创建,这个类的构造函数使用几个与 Ellipse2D.Float 相同的参数。要创建弧线,需要指定一个椭圆、该椭圆的可见部分(单位为度)以及弧线的起点。

要创建弧线,向构造函数传递下述整型参数:

椭圆外接矩形左上角的x坐标;

该矩形左上角的y坐标;

该矩形的宽度;

该矩形的高度;

弧线的起点(0°~359°);

弧线长度,单位为度;

弧线类型。

弧线的起点为0°~359°,方向为逆时针方向,其中0°对应于3点钟的位置,如图23.1所示。

图23.1 如何使用度数来定义弧线

弧线的类型用Arc2D.Float类的3个类变量之中的一个指定:PIE将弧线绘制为饼图的一部分;CLOSED将弧线的起点和终点用直线相连;OPEN不将终点和起点相连。

下面的语句创建一个非闭合弧线,其外接矩形的左上角坐标为(100, 50),高度和宽度值都是75,弧线从30°处开始,长120°:

23.5 绘制饼图

在结束本章前,将创建图形用户界面组件 PiePanel,它显示一个饼图。该组件是 JPanel的子类,JPanel是一个简单的Swing容器,非常适合用于在其中绘制内容。

开始创建类之前,应定义创建其对象的方式。使用PiePanel类的应用程序必须执行下面的步骤:

使用构造函数 PiePanel(int)创建一个 PiePanel 对象,其中的整型参数指定饼图包含的切片数;

调用对象的 addslice(color, float)方法给切片指定颜色和值。

PiePanel中的每个切片的值为其表示的数量。

例如,表23.1列出了在头38年中,美国学生还贷数据,这些数据是高等教育办公室提供的。

表23.1 美国学生还贷统计表

可以使用PiePanel在饼图中表示这些数据,为此可使用下述代码:

图23.2所示为一个应用程序运行时显示出的结果,该应用程序包含了一个使用学生贷款数据创建的PiePanel组件。

图23.2 在饼图中显示学生贷款数据

在创建PiePanel对象时,构造函数中指定了切片数。要绘制每个切片,还需要知道其他3项内容:

切片颜色,用Color对象表示;

每个切片代表的值;

所有切片代表的总值。

使用助手类PieSlice来表示饼图中的每个切片:

每个切片都是通过调用 PieSlice(Color, float)创建的。所有切片的总值将存储在 PiePanel类的私有实例变量totalSize中,这个类中还有实例变量background和current,它们分别用于存储面板背景色和对切片进行计数:

有了PieSlice类后,就可以使用另一个实例变量创建一个PieSlice对象数组:

创建PiePanel对象时,没有指定切片的颜色和大小。在构造函数中只需指定slice数组的长度并保存面板的背景色:

addSlice(Color, float)方法用于在面板中添加饼图切片:

current实例变量用于将每个切片存储到slice数组的相应元素中。数组的length变量指出了数组被定义为存储多少个元素,因此只要current不大于slice.length,就可以继续往面板中添加切片。

正如读者预期的,PiePanel类在其paintComponent()方法中处理所有的图形操作。该任务中最棘手的是绘制代表每个饼图切片的弧线。

这是由下面的语句处理的:

变量start用于记录弧线的起点,变量extent用于记录弧线的长度。如果知道所有饼图切片的总值和每个切片的值,便可以将切片的值乘以360再除以所有切片的总值,从而计算得到extent的值。

所有弧线都是在一个for循环中绘制的:计算出每个弧线的extent,创建该弧线并将start增加 extent。这确保下一个切片紧邻最后一个切片。最后,调用 Graphics2D 的 fill( )方法绘制弧线。

要将上述内容组合在一起,创建一个名为PiePanel的Java空文件,然后输入程序清单23.1所示的内容。

程序清单 23.1 PiePanel.java 的完整源代码

在程序清单23.1中,第1~54行定义了PiePanel类,在第56~64定义了PieSlice助手类。PiePanel类可以在任何Java程序的GUI中用作组件。要测试PiePanel,需要创建一个类,并在其中使用该PiePanel。

程序清单23.2是一个使用PiePanle类的应用程序——PieFrame。创建一个Java空文件,然后输入程序清单23.2中的所有文本。

程序清单 23.2 PieFrame.java 的完整源代码

PieFrame 类是一个简单的图形用户界面,包含一个组件,该组件是在第 24 行创建的PiePanel 对象。在第 25~35 行,该对象的 addSlice( )方法被调用了 10 次,以将切片添加到饼图中。

运行该应用程序时,PieFrame 将显示一个饼图,其中包含 10 个人口最多的国家的人口数量(单位为百万),这些数据来自美国人口普查局于2011年7月发表的国际数据报告。按从多到少的顺序依次为:中国(13.37 亿)、印度(11.89 亿)、美国(3.11 亿)、印尼(2.46亿)、巴西(2.03亿)、巴基斯坦(187亿)、尼日利亚(1.66亿)、孟加拉国(1.59亿)、俄罗斯(1.39亿)和日本(1.27亿)。

由于Java在Color类中只定义了几种颜色,因此这里创建了10种新颜色,并赋予它们描述性名称。这些颜色是用十六进制值表示的(在Java中,十六进制值以0x打头),但也可以在 Color( )构造函数使用十进制值来指定它们。

图23.3所示为运行该应用程序时的结果。

图23.3 在饼图中显示人口数据

注意:

通过访问www.cadenhead.org/census,可以找到美国人口普查局发布的当前国际人口数据。

23.6 总结

通过使用字体、颜色和图形,可以让程序中的元素更具备吸引力,从而引起用户的注意。

尽管使用Java中的形状在进行绘制时,看起来相当麻烦,而且不是那么值得,但是,与从图像文件中载入的图形相比,使用多边形描绘的图形具有两个优势:

速度:即使是加载和显示小图形(如图标),所需的时间也比加载和显示一系列多边形长。

缩放:对于由多边形组成的图像,只需修改用于创建多边形的值就能改变整个图像的大小。例如,可在 Sign 类中添加一个函数,将每个形状的(x, y)点乘以 2 再创建它们,这样图像将比原来大一倍。缩放多边形图像的速度比图像文件快,且得到的结果更好。

23.7 问与答

问:如何沿顺时针方向(而不是逆时针方向)绘制弧线?

答:可以将弧线的长度设置为负数。弧线起点不变,但方向相反。例如,下面的语句绘制一条这样的非闭合弧线,其外接矩形的左上角坐标为(35, 20),高度为 20,宽度为 15,弧线的长度为90°,起点为0°,方向顺时针方向:

问:椭圆和圆没有角。在构造函数 Ellipses.Float 中指定的(x, y)坐标是什么?

答:(x, y)坐标是椭圆和圆中最小 x 坐标和最小值 y 坐标,如果绘制一个外接椭圆或圆的矩形,该矩形左上角的(x, y)坐标就是该方法中指定的参数。

问:如何在Java中使用XRender?

答:在基于 X11 的环境中(通常是 Linux 上),Java 7 支持使用 XRender 渲染引擎来绘制Java2D图形。该功能在默认情况下是关闭的,必须使用命令行选项Dsun.java2d.xrender=ture来启用该功能。XRender 允许 Java 程序使用现代图形处理单元(Graphics Processing Unit, GPU)的性能来绘制图形。

在 NetBeans中,通过选择 Run->Set Project Configuration->Customize 可以设置该选项。使用 VM Options 字段来设置该选项,然后单击 OK 即可。

23.8 测验

回答下面的问题,看是否掌握了字体和颜色的使用技巧。

23.8.1 问题

1.下面哪一个不是用来选择颜色的常量?

a.color.cyan。

b.Color.teal。

c.Color.magenta。

2.当对颜色进行更改并在容器中进行重绘时,必须怎么做才能使其可见?

a.使用 drawColor( )方法。

b.使用 repaint( )语句。

c.什么都不做。

3.RGB表示什么意思?

a.Roy G. Biv。

b.Red Green Blue。

c.Lucy in the Sky with Diamonds。

23.8.2 答案

1.b.JacksonVille Jaguars 的原色 teal已经从 Color类中移除。

2.b.调用 repaint( )方法时,必须手动调用 paintComponent( )方法。

3.b.如果c选项是正确答案,则只有在若干年后回忆时,才会“看到”(钻石)的颜色。

23.9 练习

为了进一步巩固你在编程中使用字体和颜色的技巧,请完成下面的练习:

创建PieFrame类的一个新版本,其中,颜色值和饼图切片的值不再出现在应用程序的源代码中,而是作为命令行参数传入。

创建一个应用程序,它使用颜色、形状和字体在面板中绘制一个“停止”标记。

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

没有精选讨论主题。

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

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