[翻译]Java Swing(1)
前言
第2版的<<Java Swing>>涵盖了jdk1.3和jdk1.4的所有特性。AWT刚开始时是JDK的一部分,但对于复杂的用户接口的支持不够,而且它还有移植性问题。它严重依赖运行平台的本地用户接口组件,而在这些组件行为的差异方面的隐藏方面有问题。在jdk1.1里引入了新的更有效的事件模型。Swing在三方面改进了AWT.第一,Swing不依赖于运行平台的本地组件。它完全用Java编写并创建它拥有的组件。因为组件不会从运行平台继承奇怪的行为这就解决了大部分移植性问题。第二,因为Swing完全控制组件,组件在屏幕上的外观,这给了你控制你的应用程序外观的更多控制权。你可以选择一些内建的“外观样式”,或者你可以创建你自己的外观样式。这叫做“可插拔外观样式”(PLAF)。第三,Swing清晰地分离开组件显示的数据(模型)和实际显示(视图)。这意味着组件是极其灵活的。这使得修改组件来显示原来设计中没预想过的新的数据或者在不引起底层数据的混乱的情况下改变一个组件的外观和行为变得简单。
这本书深入讨论了组件背后的模型—代理机制和所有的数据模型。当一个应用程序需要和组件的默认行为根本不同的东西时对模型的理解就很重要了。例如,如果你需要一个显示不同数据类型的组件或者一个以非标准方式组织数据的组件。
主要的Swing类包含在以下包中:1)javax.accessibility 为使用标准用户接口有困难人提供支持的类 2)javax.swing 大量Swing组件 3)绘制组件边上的奇特的边框的类 4)javax.swing.colorchooser 为JColorChooser组件提供支持的类 5)javax.swing.event Swing事件
6)javax.swing.filechooser 为JFileChooser组件提供支持的类 7)javax.swing.plaf 支持PLAF的类,包括实现Metal和Multi L&Fs的类(Windows和Motif L&Fs的实现在com.sun.java.swing.plaf里,Macintosh在com.apple.mrj.swing)8)javax.swing.text 为文本组件提供支持的类(象JTextField,这些组件在javax.swing包里)。9)javax.swing.text.html和javax.swing.text.rtf html文件和微软RTF文档的编辑工具。Text.html有一个子包,parser,这里面有解析HTML的工具 10)javax.swing.tree 为JTree组件提供支持的类(JTree本身在javax.swing) 11)javax.swing.undo 实现撤消操作的类。
第1章 Swing简介
sun把Swing定义为一组用户自定义化的图形组件,这些组件的外观样式可以在运行时改变。实际上,Swing含义远不只此。它是Sun创建的用于java企业级应用开发的下一代GUI工具集。这就意味着程序员可以使用Swing和一组功能强大的组件来创建大型java应用程序。还可以方便地扩展或者修改这些组件来控制它们的外观和行为。
基本类库是用来帮助程序员使用java创建企业级应用的一组库。JFC除了包括Swing外,还包括AWT,Accessibility API, 2D API,并加强了对拖放功能的支持。
Swing是建立在核心AWT库之上。Swing并不包括任何平台相关(本地)代码,你可以在任何实现jdk
Swing引进了一个Action类,这使得协调GUI组件和它们的功能简单化。尽管本身没有定义大量事件,Swing却极其依赖于AWT1.1的事件处理机制。每一个Swing组件还包括一些外在属性。这是因为Swing组件和JavaBeans规范有联系。这就意味着可以把Swing组件引进到各种GUI构建工具中,这对可视化编程来说很有用处。
Swing的特性有:1)可插拔的外观样式。Swing允许用户在运行时改变外观样式而不需要关闭应用程序。2)轻量级组件 这是指组件不依赖于本地的对等组件来渲染它们。而是它们使用简单的图形元素来绘制自身甚至允许部分透明。而AWT组件是“重型组件”。轻型组件使用Graphics对象的绘图元素(象drawLine(),fillRect()等)来渲染自身。一般在包含它们的顶层重型组件表面渲染自身。绝把部分Swing组件是轻型组件,只有一些顶层容器不是。这种设计使得程序员可以在运行时绘制应用程序的外观。而且,Swing组件支持组件行为的简单修改。例如,你可以告诉几乎所有Swing组件是否接受或失去焦点,怎样处理键盘输入。
3)Swing有各种新组件,象table,tree,slider,spinner,progress bar,internal frame和文本组件。支持边框修饰物的替换。可以有tooltip.可以绑定键盘事件到组件上。对渲染你的自定义轻型组件有额外的除错支持。
Swing使用MVC模式(模型—视图—控制器)作为每个组件背后的设计基础。MVC把GUI组件分成三部分,每一部分在组件行为中扮演重要位置。
模型:模型保存了各个组件的状态数据。对于不同类型的组件有不同的模型。例如,一个scrollbar组件的模型可能包含调整条的当前位置,最大/最小值,调整条的宽度。一个菜单可能只单单包含用户可以选择的菜单项的列表。不管组件在屏幕上如何绘制这些信息是不变的。模型数据一般和组件的可视化表示独立开。
视图:视图涉及你在屏幕上如何看到组件。例如,几乎所有窗体都在顶部有一个标题栏。然而,在Mac Os中,标题栏在左边,而在Windows平台却在右边。
控制器:这是决定组件接口如何和事件交互的用户接口部分。
Swing实际上使用一个MVC模式的简化版,叫做模型—代理模式。这个模式把视图和控制器合进一个元素----UI代理中,这个代理在屏幕上绘制组件并处理GUI事件。
每一个Swing组件有一个模型和UI代理。模型维护组件的状态信息。UI代理维护如何在屏幕上绘制组件的信息。模型和UI代理的分离有很多好处。MVC模式的一个特别的方面就是一个模型可以对应多个视图。例如,如果你想在一个饼图和一个表格中显示同样的数据,你可以在同一个数据模型基础上用两个视图来显示。
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
posted on 2006-08-13 14:38 Phinecos(洞庭散人) 阅读(1136) 评论(0) 编辑 收藏 举报