在Java编程中,JFC是GUI程序设计的事实标准。本书深入、全面地讨论了JFC编程技术细节,是一本世界级的JFC畅销书。书中使用工业级程序示例,深入介绍了J2SE1.3新引入的关键JFC特性,包括Swing增强、输入校验和新的按键绑定模式。作者从程序员的视角出发,致力于解决编程开发中最常见,而JFC文档中又语焉不详的关键问题,包括树型组件的处理、定制渲染器和编辑器的使用、文本组件、使用内部窗体建立多文档程序等。此外,光盘包括书中所有例子的源代码,可在Windows、Solaris和Linux上编译并运行。本书适用于有经验的Java程序员,对于那些希望深入探索JFC,特别是Swing组件集的开发人员尤其有用。
第一部分 从AWT到Swing\r\n 第一章 Jvav基础类简介\r\n 第二章 窗体、标签和按钮\r\n 第三章 管理用户界面\r\n 第四章 图形、文本处理和打印\r\n第二部分 使用Swing建立更好的应用程序\r\n 第五章 键盘处理、Action和滚动\r\n 第六章 菜单和工具条\r\n 第七章 使用标准对话框\r\n 第八章 创建定制对话框\r\n第三部分 高级主题\r\n 第九章 文本控件\r\n 第十章 树型控件\r\n 第十一章 表控件\r\n 第十二章 多文档应用程序\r\n 第十三章 可插入外观\r\n附录A SWING和APPLET\r\n\r\n
Kim Topley,资深软件开发者,从业经验超过25年,是全球首批获得Sun Certified Java Developer资格认证的人之一。他是Core Swing:Advanced Programming一书的作者。
Java基础类(Java Foundation Classes, 即JFC)是Java 2平台标准版的一部分, 它是一组用户界面功能的集合. 其中的许多功能, 特别是Swing用户界面工具包, 在Java 2发布前就已经开发出来, 因此在JDK1.1中也可以使用. JFC所涉及的内容是如此之多, 以至于要在一本书中涵盖它, 并达到有经验的程序员所期望的高度, 实在是不太可能. 因此, 本书并不试图去描述JFC中的所有内容. 相反, 笔者选择了对工作在商业化Java开发环境中的程序员具有最直接意义的那些部分. 更为高级的内容将在本书的姊妹篇Core Swing: Advanced Programming中详细讨论, 该书也是由Prentice Hall出版的.
本书的大部分内容都集中在JFC的一个子集中, 即那些可以同时在JDK1. 1和Java 2平台上使用的功能. 具体地说, 本书将简要介绍在JDK1. 1中就已经存在的AWT工具包, 另外还介绍打印, 它是JDK1. 1中的功能, 我们相信它将成为JFC的一部分, 最后介绍Swing组件集, 它是本书的主要内容.
在关于Swing的讲述中, 本书试图包括对程序员有直接用处的那些材料, 以便用来创建实际的应用程序. 在本书的每一章中, 首先会给出每个主题的概述, 然后用例子来演示相关的基本原理, 对Swing组件和各种新的Swing机制(例如快捷键)的工作原理进行解释. 然后, 通常会演示组件和功能的一些复杂用法, 以及如何将它与其他组件和功能协同使用, 以解决与实际应用相关的问题. 大多数情况下, 阅读JDK或Swing软件包的文档即可了解到相关的知识, 但该文档通常缺乏对较为复杂的特性及特性间交互情况的介绍. 而程序员通常需要了解这些, 才能使软件包物尽其用. 在本书中, 你可以找到所需要的解释.
在写作过程中, 笔者试图使本书能够适用于首次接触Swing的有经验的程序员. 通过阅读文档. 研究源代码. 反汇编类文件, 并试验各种测试例子, 笔者把Sun公司的文档中所没有的材料和例子收集起来, 并将其按照有组织而集中的方式呈现给读者, 而不是只肤浅地介绍一下JFC这个庞大而复杂的主题.
本书的读者
本书适用于那些希望深入探索JFC, 特别是Swing组件集的有经验的Java程序员. 因此书中的例子大部分都较复杂, 当然, 前几章中用于演示基本概念的例子除外. 你可以发现, 本书中的许多例子都是产品化代码的起点, 你可以将其包含到自己的应用程序中:自从Swing的早期版本发布以来, 在各种新闻组和讨论组中提出了许多问题, 本书中的一些材料便是为解决其中最常见的那些问题而特地加入的. 特别地, 笔者试图解决如下最容易使人迷惑的问题:
·创建并定制树型组件
·列表框. 树. 表的定制渲染器和编辑器
·如何使用强大的Swing文本组件, 包括对组件工作方式的详细描述
·正确使用内部窗体功能来创建多文档应用程序
·通过自行创建外观类, 对单个组件进行定制
本书的内容主要是编写Java应用程序, 而不是applet. 不过, 如果你早已对applet非常熟悉, 那么本书的大部分内容都还是可用的, 你可以很容易地使用Swing来编写applet, 这是因为在应用程序和applet中Swing组件都是可用的. 为了使事情更加容易, 本书特地添加了一个附录, 其内容都是在applet环境中Swing组件的用法, 其中包括一些可能会给开发者带来问题的主题的讨论, 例如如何在不包括Swing的浏览器中使用Swing, 以及如何以不依赖于浏览器和位置的方式来访问非代码资源, 如图像文件.
你需要哪些预备知识
本书假定你对Java语言和核心的Java类都比较熟悉, 可以编译并运行Java应用程序. 尽管本书主要是关于Swing组件的, 前几章还是涵盖了一些AWTI具包的基本原理, AWT的知识是理解Swing的先决条件. 如果你已经读过Core Java 2, Volume 1-Fundamentals(该书也是由Prentice Hall出版的, 作者是Cay S. Horstmann和Cay Comed), 而且对内部类具有良好的理解, 该技术在Swing的源代码和本书的例于中大量使用, 那么阅读本书才能获得最大的益处. Core Java一书对内部类技术进行了极好的讨论.
假定你有一台电脑, 运行Windows 95, Windows 98, Windows 2000, Windows NT 4或更高版本, Linux或Solaris, 那么所需的其余东西, 包括Java 2平台和专业化的开发环境(JBuilder 4基本版), 都可以在本书的配套光盘上找到.
本书的组织方式
本书分为3部分. 第1部分, "从AWT到Swing"(第1-4章), 描述了AWT和Swing之间的关系. 由于Swing是基于AWT的, 由此需要具有后者的某些知识, 才能把Swing完全地利用起来. 因此, 本书的开篇介绍了AWT基础, 可供尚未完全理解AWT的人学习, 如果你已经掌握了AWT, 也可以复习一下. 这些章节不仅仅是作为简短的AWT课程而写, 它们有意识地倾向于Swing, 因此在第2章你就能遇到并使用第一个Swing组件. 笔者推荐所有的人都阅读第1章, 接着, 根据你的背景知识, 你应该阅读或至少浏览一下2-4章.
第2部分, "使用Swing建立更好的应用程序"(第5-8章), 这部分讲解Swing提供的各种新的机制和组件, 这些在AWT中都没有实际的对应物. 大部分内容都是关于单个的Swing组件或概念, 在某种程度上, 可以接任何顺序阅读本部分的各章. 最后是第3部分, "高级主题"(第9-13章), 这部分涵盖了一些较大的主题, 如树和表组件以及可插入的外观类.
第1章介绍了Java基础类(JFC), 并将其与AWT进行比较. 在这里你可以了解JFC的范围, 并快速浏览Swing组件集的主要特性. 本章的最后部分将介绍Swing更为新奇的特性之---所谓的"可插入外观类", 该功能使得应用程序可以改变其外观以适合于所运行的平台, 或者在所有平台上都呈现相同的外观. 另外, 还解释了该技术的基础, 模型/视图/控制器体系结构(MVC).
第2章开始对AWT进行回顾. 本章开头介绍了应用程序的顶层窗口--Swing类Jframe, 然后使用它来演示基本的AWT概念, 如组件. 容器. 位置. 大小. 颜色. 宇体等等. 本章的后半部分包括了事件处理的有关内容, 并介绍了Swing的JLabel和JButton类, 这两个类使得可以在同一组件上加入文本和图像. 你在这里可以发现一些AWT所不具备的Swing功能, 如图标和快捷键.
第3章讨论了用户界面的整体布置问题, 主要是控制界面上的组件布局. 因此本章有意识地涵盖了AWT和Swing的布局管理器, 其内容颇有深度. Java书籍中有关布局管理器方面的内容通常都较为肤浅, 而在与Java相关的Internet新闻组所提出的问题中, 相当大一部分都与该主题有关. 本章通过演示各种管理器如何对容器中的组件进行布置, 以及容器的大小改变对组件位置的影响, 试图对所有的布局管理器给出一个一致的描述, 并澄清那些最常见的误解.
Swing包括了一个称之为"图形化调试"的新功能, 有助于理解组件布局的问题. 通过该功能, 你可以看到组件的逐行的缓慢绘制过程. 第3章将关注该功能并给出其用法, 还包括由窗口和单独的组件所产生的事件等.
第4章介绍了AWT的Graphics对象, 并描述了如何使用该对象来渲染文本和绘制图形. 本章的主体是建立一个完整的Swing应用程序, 可以利用鼠标在其中绘制和填充彩色图形. 当创建该应用程序时, 你可以把前两章中的很多内容都付诸于实践, 还能发现如何创建定制的图标和带有边框的组件. 完成后的应用程序只是一个起点, 本书其余部分还会对其进行一些改进. 第4章最后讨论了打印的问题, 这是一个在过去也引起过很多混淆的主题.
第5章演示在用户更喜欢使用键盘而不是鼠标时, 如何开发出工作良好的应用程序, 并介绍了焦点的处理和另一个强大的概念Action. Action在Swing中是一个抽象概念, 通常指的是响应某种事件(如按键和压下按钮)时所执行的动作. 本章的后半部分介绍了Swing通过新的JScrollPane和JScrollBar组件对滚动的支持, 这比AWT中的相应功能要更为强大.
第6章介绍了Swing的菜单系统. Swing中的菜单比AWT更加一致. 对任何菜单或菜单项都可以使用快捷键, 而且还可以使用图标或文本. 你还可以看到如何把第5章所引入的Action集成到菜单系统中, 以及一个新的Swing功能--工具条.
第7章和第8章广泛地讨论了对话框. 第7章的内容主要集中在可使用JOptionPane组件创建的基本对话框, 可以在其中给出错误. 警告和其他信息, 或者是提供一些选项, 等待用户进行选择. 本章还包含了两个较为复杂但极为有用的标准对话框--文件选择器和颜色选择器.
第8章示范了如何使用Swing的JDialog类来创建自己的对话框. 本章还介绍了许多在对话框中可用到的Swing组件, 如属性页窗格. 列表框. 组合框. 进度条和滑块等.
第9章深入地描述了Swing的文本控件, 从简单的JTextField和JTextArea组件开始, 这两个组件与AWT中的TextField和TextArea控件有关. Swing控件的基础是一个复杂而强大的文档模型, 本章将详细描述该模型. 文档模型之后描述了两个新的Swing文本控件JTextPane和JEditorPane,前者可以将多种字体. 颜色. 图像和事件组件混合到文档的视图中, 而JEditorPane则相当灵活, 可以适用于多种文档的渲染, 包括纯文本. HTML. rtf(Rich TextFormat)格式等, 而且有无数种潜在的文档格式可用.
第10章描述了Swing的树型控件, 演示了如何建立树, 如何控制各个部分的展开与关闭, 如何以不同的方式遍历树. 本章还示范了基于树的定制控件, 表示了一个文件系统, Windows平台的用户对此应该很熟悉. 此处详细描述了如何使用特别开发的渲染器来对树进行定制, 以便控制树的各个部分的绘制方式.
第11章与表组件有关. 该组件能够以表格形式表示数据. 你在本章中可以看到如何确定列的顺序和大小, 以及如何改变表格中数据的显示方式. 还有一节是关于表控件的单元格编辑器的, 示范了如何向用户提供合适的接口来改变表格的内容.
第 12章讨论了 Swing对多文档应用程序的支持. 本章从使用多文档应用程序成为可能的最为基本的组件谈起, 然后讨论桌面窗格. 图标和桌面管理器. 你还可以看到如何创建定制的桌面窗格, 自动地对其所管理的窗口进行层叠或平铺显示, 以及如何定制桌面管理器.
最后, 第13章又返回到第1章接触过的可插入外观类. 本章示范了对改变应用程序的外观的底层支持, 并演示了如何为Swing的按钮组件创建自己的用户界面. 最后, 你还可以看到把外观类相关的定制引入到应用中的各种途径, 以及如何创建自己的外观类.
本书涵盖了所有的Swing组件以及大部分重要的Swing特性. 为便于参考, 下表列出了Swing组件, 以及对其进行描述的章节.