- 浏览: 684291 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (297)
- J2SE (78)
- swt/飞信 (20)
- mysql/mssql (17)
- 设计模式 (5)
- windows (18)
- 闲言碎语 (19)
- struts 1.x (6)
- JVM (6)
- tomcat/jetty (8)
- jquery/javascript (15)
- web前端 (6)
- J2EE (0)
- PHP (6)
- 算法设计 (17)
- 数据结构 (3)
- C/C++ (6)
- linux (19)
- 程序打包 (8)
- eclipse/myeclipse (10)
- 其他杂项 (13)
- 应聘 (9)
- spring/spring mvc (4)
- Maven/Ant (2)
- ERROR (1)
- nosql/hbase (1)
- hibernate (3)
- Solr/Lucene (1)
最新评论
-
乔木1937:
太感谢了,看到你的文章终于解决这个问题了!
[转载]通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。 -
xianweisi:
竟然还有马
精简JRE - 实例Swing计算器 with 精简JRE(续) -
Javkburd:
我刚也遇到这个问题,然后也把默认端口改成了1433,只差最后没 ...
[转载]通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。 -
yeshaoting:
kingbinchow 写道 最近的爪哇岛 没有什么货进项呀 ...
jQuery方法区别(四)click() bind() live() delegate()区别 -
kingbinchow:
最近的爪哇岛 没有什么货进项呀!
jQuery方法区别(四)click() bind() live() delegate()区别
SWT、Swing 或 AWT:哪个更适合您?
在为新应用程序选择 GUI 工具包时应该考虑哪些因素?
developerWorks 上另外一些作者已经展示了如何在 Swing 和 SWT 之间很好地进行迁移(参见 参考资料)。本文的目标是帮助您在开始开发项目之前确定选择使用哪个 GUI 工具包。
但是首先我们要弄清一个问题:为什么会有多个 Java™ GUI 工具包呢?最好的答案是,一个工具包并不能满足所有的要求,最近也不会开发一个可以满足所有要求的 GUI 工具包。每个工具包都有各自的优缺点,这样就可以根据自己的需求和目标用户来选择适当的工具包。
下面就让我们来学习有关这些工具包的知识。
Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。AWT 的主要优点是,它在 Java 技术的每个版本上都成为了一种标准配置,包括早期的 Web 浏览器中的 Java 实现;另外它也非常稳定。这意味着我们不需要单独安装这个工具包,在任何一个 Java 运行环境中都可以使用它,这一点正是我们所希望的特性。
AWT 是一个非常简单的具有有限 GUI 组件、布局管理器和事件的工具包(参见 清单 1、清单 2 和 清单 3)。这是因为 Sun 公司决定为 AWT 使用一种最小公分母(LCD)的方法。因此它只会使用为所有 Java 主机环境定义的 GUI 组件。最终的结果非常不幸,有些经常使用的组件,例如表、树、进度条等,都不支持。对于需要更多组件类型的应用程序来说,我们需要从头开始创建这些组件。这是一个很大的负担。
清单 1. 基本的 AWT Class 树(全部在 java.awt 包中, “*” 表示抽象)
Object CheckboxGroup *Component Button Canvas CheckBox Choice Container Panel Applet ScrollPane Window Dialog Frame Label List TextComponent TextArea TextField MenuComponent MenuItem CheckboxMenuItem Menu PopupMenu |
注意:另外几个包中还有其他一些 AWT 组件,但是这是基本的组件集。
清单 2. AWT 提供了下面的布局管理器(全部在 java.awt 包中,“*” 表示接口)
*LayoutManager FlowLayout GridLayout *LayoutManager2 BorderLayout CardLayout GridBagLayout |
注意:另外几个包中还有一些 AWT 布局管理器,很多都是为它们进行布局的容器专门定制的,但是这是基本的布局管理器集。
清单 3. AWT 提供了以下事件(大部分在 java.awt.events 包中)
Object EventObject AWTEvent ActionEvent AdjustmentEvent ComponentEvent ContainerEvent FocusEvent InputEvent KeyEvent MouseEvent MouseWheelEvent PaintEvent WindowEvent HierarchyEvent InputMethodEvent InvocationEvent ItemEvent TextEvent |
注意:其他几个包中还有另外一些 AWT 事件,但是这是基本的事件集。这些是从更通用的事件生成的具体事件。
通常对于 AWT 来说(也适用于 Swing 和 SWT),每个事件类型都有一个相关的 XxxListener 接口(XxxAdapter 的实现可能为空),其中 Xxx 是去掉 Event 后缀的事件名(例如,KeyEvent 事件的接口是 KeyListener),用来把事件传递给处理程序。应用程序会为自己感兴趣处理的事件的事件源(GUI 组件或部件)进行注册。有时监听接口要处理多个事件。
AWT 的一个很好的特性是它通常可以对 GUI 组件自动进行销毁。这意味着您几乎不需要对组件进行销毁。一个例外是高级组件,例如对话框和框架。如果您创建了耗费大量主机资源的资源,就需要手动对其进行销毁。
AWT 组件是 “线程安全的(thread-safe)”,这意味着我们不需要关心在应用程序中是哪一个线程对 GUI 进行了更新。这个特性可以减少很多 GUI 更新的问题,不过使 AWT GUI 运行的速度更慢了。
AWT 让我们可以以自顶向下(top-down) 或自底向上(bottom-up) 或以任意组合顺序来构建 GUI。自顶向下的意思是在创建子组件之前首先创建容器组件;自底向上的意思是在创建容器(或父)组件之前创建子组件。在后一种情况中,组件的存在并不依赖于父容器,其父容器可以随时改变。
通常来说,AWT GUI 都是不可访问的。系统并没有为 AWT 程序员提供 API 来指定可访问性信息。可访问性(accessibility)处理的是残疾人可以怎样使用应用程序的问题。一个应用程序要想有很好的可访问性,必须与运行平台一起,让残疾人可以通过使用适当的辅助技术(提供其他用户接口的工具)来使用这些应用程序。很多政府和企业都有一些强制要求应用程序为实现可访问性而采用的标准。
Sun 希望 Java 语言能够成为一种 “编写一次就可以随处运行(write once, run everywhere,即 WORE)” 的环境。这意味着可以在一台机器上开发和测试 Java 代码(例如在 Windows® 上),然后不经测试就可以在另外一个 Java 主机上运行同样的 Java 代码。对于大部分情况来说,Java 技术都可以成功实现这种功能,但是 AWT 却是一个弱点。由于 AWT 要依赖于主机 GUI 的对等体(peer)控件(其中每个 AWT 组件都有一个并行的主机控件或者对等体)来实现这个 GUI,这个 GUI 的外观和行为(这一点更重要)在不同的主机上会有所不同。这会导致出现 “编写一次随处测试(write once, test everywhere,即 WOTE)” 的情况,这样就远远不能满足我们的要求了。
AWT 提供了一个丰富的图形环境,尤其是在 Java V1.2 及其以后版本中更是如此。通过 Graphics2D 对象和 Java2D、Java3D 服务,我们可以创建很多功能强大的图形应用程序,例如画图和制表包;结合使用 JavaSound,我们还可以创建非常有竞争力的交互式游戏。
Java Swing 是 Java Foundation Classes(JFC)的一部分,它是试图解决 AWT 缺点的一个尝试。在 Swing 中,Sun 开发了一个经过仔细设计的、灵活而强大的 GUI 工具包。不幸的是,这意味着我们又要花一些时间来学习 Swing 了,对于常见的情况来说,Swing 有些太复杂了。
Swing 是在 AWT 组件基础上构建的。所有 Swing 组件实际上也是 AWT 的一部分。Swing 使用了 AWT 的事件模型和支持类,例如 Colors、Images 和 Graphics。Swing 组件、布局管理器以及事件总结如下(参见 清单 4、清单 5 和 清单 6)。正如您可以看到的一样,这些组件集比 AWT 提供的组件集更为广泛,与 SWT 组件集相比也毫不逊色。
清单 4. 基本的 Swing Class 树(全部在 javax.swing 包或其子包中,“*” 表示抽象类)
Object *Component Container *JComponent *AbstractButton JButton JMenuItem JCheckBonMenuItem JMenu JRadioButonMenuItem *JToggleButton JCheckBox JRadioButton Box Filler JColorChooser JComboBox JDesktopIcon JFileChooser JInternalFrame JLabel JLayeredPane JDesktopPane JList JMenuBar JOptionPane JPanel JPopupMenu JProgressBar JRootPane JScrollBar JScrollPane JSeparator JSlider JSplitPane JTabbedPane JTable JTableHeader *JTextComponent JEditorPane FrameEditorPane JTextPane JTextArea JtextField JPasswordField JToolBar JToolTip JTree JViewport ScrollableTabViewport Panel Applet JApplet Window Dialog JDialog Frame JFrame JWindow |
注意:在另外几个包中还有其他一些 Swing 组件,但是这是基本的组件集。
清单 5. Swing 提供了以下 LayoutManagers(全部在 javax.swing 包或其子包中,“*” 表示接口)
*LayoutManager CenterLayout *LayoutManager2 BoxLayout OverlayLayout SpringLayout |
注意:在另外几个包中还有其他一些 Swing 布局管理器,很多都是为它们所布局的容器而专门定制的,但是这是基本的布局管理器集。
清单 6. Swing 提供了以下事件(大部分在 javax.swing.events 包及其子包中)
Object EventObject AWTEvent AncestorEvent ComponentEvent InputEvent KeyEvent MenuKeyEvent MouseEvent MenuDragMouseEvent InternalFrameEvent |
注意:在另外几个包中还有其他一些 AWT 事件,但是这是基本的事件集。这些是从更通用的事件生成的 “高级” 事件。
为了克服在不同主机上行为也会不同的缺点,Swing 将对主机控件的依赖性降至了最低。实际上,Swing 只为诸如窗口和框架之类的顶层 组件使用对等体。大部分组件(JComponent 及其子类)都是使用纯 Java 代码来模拟的。这意味着 Swing 天生就可以在所有主机之间很好地进行移植。因此,Swing 通常看起来并不像是本地程序。实际上,它有很多外观,有些模拟(尽管通常并不精确)不同主机的外观,有些则提供了独特的外观。
Swing 对基于对等体的组件使用的术语是重量级(heavyweight),对于模拟的组件使用的术语是轻量级(lightweight)。实际上,Swing 可以支持在一个 GUI 中混合使用重量级组件和轻量级组件,例如在一个 JContainer 中混合使用 AWT 和 Swing 控件,但是如果组件产生了重叠,就必须注意绘制这些控件的顺序。
Swing 无法充分利用硬件 GUI 加速器和专用主机 GUI 操作的优点。结果是 Swing 应用程序可能比本地 GUI 的程序运行速度都慢。Sun 花费了大量的精力来改进最近版本的 Swing (Java V1.4 和 1.5)的性能,这种缺点正在变得日益微弱。由于 Swing 的设计更加健壮,因此其代码基础也更坚实。这意味着它可以在一台健壮的机器上比 AWT 和 SWT 上运行得更好。
除了具有更多的组件、布局管理器和事件之外,Swing 还有很多特性使得自己比 AWT 的功能更加强大。下面是更为重要的几个特性:
java.util.Date
值的列的表可以有一些专用的代码来呈现数据值和编辑数据值。每一列都可以有不同的类型。与 AWT 一样,Swing 可以支持 GUI 组件的自动销毁。Swing 还可以支持 AWT 的自底向上和自顶向下的构建方法。
与 AWT 不同,Swing 组件不是线程安全的,这意味着您需要关心在应用程序中是哪个线程在更新 GUI。如果在使用线程时出现了错误,就可能会出现不可预测的行为,包括用户界面故障。有一些工具可以帮助管理线程的问题。
与 AWT 类似,Swing 的一个优点是,它也是 Java 技术的一种标准配置。这意味着您不需要自己来安装它了。不幸的是,Swing 已经有了很大的变化,因此它很容易变得依赖于最新版本的 Java 语言所提供的特性,这可能会强制用户更新自己的 Java 运行时环境。
与 AWT 的概念相比,SWT 是一个低级的 GUI 工具包。JFace 是一组用来简化使用 SWT 构建 GUI 的增强组件和工具服务。SWT 的构建者从 AWT 和 Swing 实现中学习了很多经验,他们试图构建一个集二者优点于一体而没有二者的缺点的系统。从很多方面来说,他们已经成功了。
SWT 也是基于一个对等体实现的,在这一点上它与 AWT 非常类似。它克服了 AWT 所面临的 LCD 的问题,方法如下:定义了一组控件,它们可以用来构建大部分办公应用程序或开发者工具,然后可以按照逐个主机的原则,为特定主机所没有提供的控件创建模拟控件(这与 Swing 类似)。对于大部分现代主机来说,几乎所有的控件都是基于本地对等体的。这意味着基于 SWT 的 GUI 既具有主机外观,又具有主机的性能。这样就避免了使用 AWT 和 Swing 而引起的大部分问题。特定的主机具有一些低级功能控件,因此 SWT 提供了扩充(通常是模拟的)版本(通常使用 “C” 作为名字中的第一个字母),从而可以产生更一致的行为。
在对等体工作方式上,SWT 与 AWT 不同。在 SWT 中,对等体只是主机控件上的一些封装程序而已。在 AWT 中,对等体可以提供服务来最小化主机之间的差异(就是在这里,AWT 碰到了很多行为不一致的问题)。这意味着 SWT 应用程序实际上就是一个主机应用程序,它必然会全部继承主机的优点和缺点。这还意味着 SWT 不能完全实现 WORE 的目标;它更像是一种 WOTE 解决方案。这就是说,SWT 尽管不如 Swing 那么优秀,但是它在创建可移植解决方案方面是很杰出的。
SWT 部件、布局和事件总结如下(参见 清单 7、清单 8 和 清单 9)。正如您可以看到的一样,这些组件集比 AWT 提供的组件集更为广泛,与 Swing 组件集相比也毫不逊色。
清单 7. 基本的 SWT Class 树(大部分在 org.ecipse.swt.widgets 或 org.eclipse.swt.custom 包或子包中,“*” 表示抽象类,“!” 表示在 custom 包中,“~” 表示在其他包中)
Object *Dialog ColorDialog DirectoryDialog FileDialog FontDialog MessageDialog PrintDialog *Widget Menu *Item CoolItem !CTabItem MenuItem TabItem TableColumn TableItem TableTreeItem ToolItem TrayItem TreeColumn TreeItem *Control Button Label ProgressBar Sash Scale Scrollable Composite ~Browser Canvas *~AbstractHyperlink ~Hyperlink ~ImageHyperlink *~ToggleHyperline ~TreeNode ~Twistie AnimatedProgress !CLabel Decorations Shell FormText StyledText TableCursor !CBanner !CCombo Combo CoolBar !CTabFolder ~ExpandableComposite ~Section ~FilteredList ~FilteredTree ~Form Group ~PageBook ProgressIndicator !SashForm !ScrolledComposite TabFolder Table TableTree ToolBar Tray Tree ViewForm List Text Slider |
注意:在另外几个包中还有其他一些 SWT 部件,但是这是基本的部件集。
与 AWT 和 Swing 布局管理器类似,SWT 也提供了非常丰富的布局部件集。布局系统与嵌套容器一起使用,可以生成所需要的任何布局算法。所有这 3 个 GUI 库也可以支持对部件的定位实现绝对控制。SWT 没有等效的 BorderLayout 部件,这一点非常令人失望。FormLayout 对于创建表单基本输入来说非常好用。我认为 SWT 的布局机制比 AWT/Swing 布局部件集的使用更难学习。
清单 8. SWT 提供了以下布局管理器(大部分在 org.eclipse.swt.layout 和 org.eclipse.swt.custom 包或子包中,“*” 表示接口,“!” 表示在 custom 包中)
*Layout FillLayout FormLayout GridLayout RowLayout !StackLayout |
注意:在另外几个包中还有其他一些 SWT 布局管理器,很多都是为它们所布局的容器而专门定制的,但是这是基本的布局管理器集。
与 AWT 和 Swing 事件系统一样,SWT 提供了非常丰富的事件集。尽管这些事件并不能与 AWT/Swing 的事件一一对应(例如 AWT 和 Swing 的按钮都会产生 ActionEvent 事件,而 SWT 的按钮产生的则是 SelectionEvent 事件),但是它们通常都是等价的。
清单 9. SWT 提供了以下事件(大部分在 org.eclipse.swt.events 包或 org.eclipse.swt.custom 包或其子包中,“*” 表示抽象,“!” 表示在 custom 包中)
Object EventObject SWTEventObject TypedEvent AimEvent !BidiSegmentEvent ControlEvent !CTabFlolderEvent DisposeEvent DragSourceEvent DragTargetEvent !ExtendedModifyEvent focusEvent HelpEvent KeyEvent TraverseEvent VerifyEvent !LineBackgroundEvent !LineStyleEvent MenuEvent ModifyEvent MouseEvent PaintEvent SelectionEvent TreeEvent ShellEvent !TextChangedEvent !TextChangingEvent |
注意:在另外几个包中还有其他一些 SWT 事件,但是这是基本的事件集。这些是从更通用的事件生成的具体事件。
很多 Swing 组件,例如 JTable,都有自己的模型。对应的 SWT 控件(例如 Table)则没有;不过它们有自己的条目。条目通常用来限制显示文本或通常很小的图像(例如图标)。为了提供一种类 Swing 的模型接口,SWT 使用了 JFace ContentProviders。这些组件可以在应用程序提供的模型(例如 List 或 Table 使用的 java.util.Array
)和用作视图的控件之间充当一个桥梁。为了将任意模型对象格式化成条目,SWT 使用了 JFace LabelProviders,它们可以为任何模型对象生成一个文本或图标格式。这可以对复杂模型对象的混合显示进行限制。其他类似组件,例如 ColorProviders 和 LabelDecorators,可以增强对这些条目的显示。对于 Tables 的特例来说,SWT 提供了 CellEditor,它可以临时将任意 SWT 控件链接到一个 Table 单元格上,从而当作这个单元格的编辑器使用。
SWT 不支持 GUI 控件的自动销毁。这意味着我们必须显式地销毁所创建的任何控件和资源,例如颜色和字体,而不能利用 API 调用来实现这种功能。这种工作从某种程度上来说得到了简化,因为容器控制了其子控件的自动销毁功能。
使用 SWT 只能自顶向下地构建 GUI。因此,如果没有父容器,子控件也就不存在了;通常父容器都不能在以后任意改变。这种方法不如 AWT/Swing 灵活。控件是在创建时被添加到父容器中的,在销毁时被从父容器中删除的。而且 SWT 对于 style 位的使用只会在构建时进行,这限制了有些 GUI 控件的灵活性。有些风格只是一些提示性的,它们在所有平台上的行为可能并不完全相同。
与 Swing 类似,SWT 组件也不是线程安全的,这意味着您必须要关心在应用程序中是哪个线程对 GUI 进行了更新。如果在使用线程时发生了错误,就会抛出异常。我认为这比不确定的 Swing 方法要好。有一些工具可以帮助管理线程的问题。
如果所支持的操作系统提供了可访问性服务,那么 SWT GUI 通常也就具有很好的可访问性。当默认信息不够时,SWT 为程序员提供了一个基本的 API 来指定可访问性信息。
SWT 提供了一个有限的图形环境。到目前为止,它对于 Java2D 和 Java3D 的支持还不怎么好。Eclipse 使用一个名为 Draw2D 的组件提供了另外一种单独的图形编辑框架(Graphical Editing Framework,GEF),它可以用来创建一些绘图应用程序,例如 UML 建模工具。不幸的是,GEF 难以单独(即在整个 Eclipse 环境之外)使用。
与 AWT 和 Swing 不同,SWT 和 JFace 并不是 Java 技术的标准配置。它们必须单独进行安装,这可以当作是 Eclipse 安装的一部分,也可以当作是单独的库进行安装。Eclipse 小组已经使它的安装变得非常简单,并且 SWT 可以与 Eclipse 分开单独运行。所需要的 Java 档案文件(JAR)和动态链接库(DLL)以及 UNIX® 和 Macintosh 上使用的类似库可以从 Eclipse Web 站点上单独下载。JFace 库需要您下载所有的 Eclipse 文件,并拷贝所需要的 JAR 文件。在下载所需要的文件之后,我们还需要将这些 JAR 文件放到 Java CLASSPATH 中,并将 DLL 文件放到系统 PATH 中。
下表对 AWT、SWT 和 Swing 库的很多特性进行了比较,这种比较并没有按照任何特定顺序来进行。尽管没有完全列出所有特性,但是列出了很多最重要的特性。
表 1. SWT 、AWT 和 Swing 特性的比较
显示静态文本 | Label | JLabel | Label, CLabel |
显示多行静态文本 | Multiple Labels | 具有 HTML 内容的 Multiple JLabels 或 JLabel | 具有新行的 Multiple Labels 或 Label |
显示多行格式化静态文本 | 具有不同字体的 Multiple Labels | 具有 HTML 内容的 JLabel | 具有不同字体的 Multiple Labels |
单行文本输入 | TextField | JTextField | Text(SWT.SINGLE) |
多行文本输入 | TextArea | JTextArea | Text(SWT.MULTI) |
显示图像 | N/A | JLabel | Label |
显示文本和图像 | N/A | JLabel | CLabel |
提示弹出帮助 | N/A | 组件的 setToolTip,JToolTip 子类 | 控件的 setToolTip |
风格化的文本输入 | N/A | JEditorPane | StyledText |
从条目列表中进行选择 | List | JList | List |
简单按下具有文本的按钮 | Button | JButton | Button(SWT.PUSH) |
简单按下具有文本或图像的按钮 | N/A | JButton | Button(SWT.PUSH) |
绘图区域;可能用于定制控件 | Canvas | JPanel | Canvas |
选中/取消复选框 | CheckBox | JCheckBox | Button(SWT.CHECK) |
单选按钮选择 | CheckBoxGroup | ButtonGroup 和 Menu | Group 和 Menu |
从一个下拉列表中选择 | Choice | JComboBox | Combo、CCombo |
输入文本或从下拉列表中选择 | N/A | JComboBox | Combo、CCombo |
可滚动区域 | ScrollPane | JScrollPane | 创建 Scrollable 子类 |
顶层窗口 | Dialog、Frame、Window | JDialog、JFrame、JWindow | 具有不同风格的 Shell |
通用窗口 | Window | JWindow | Shell |
框架窗口 | Frame | JFrame | Shell(SWT.SHELL_TRIM) |
对话框窗口 | Dialog | JDialog | Shell(SWT.DIALOG_TRIM) |
菜单 | Menu | JMenu | Menu |
MenuItem | MenuItem | JMenuItem | MenuItem |
菜单快捷键 | 通用击键 | 与 AWT 相同 | 依赖于主机的快捷键 |
弹出菜单 | PopupMenu | JPopupMenu | Menu(SWT.POPUP) |
菜单条 | MenuBar | JMenuBar | Menu(SWT.BAR) |
显示插入符号 | N/A | Caret | Caret |
Web 浏览器 | N/A | JTextPane(HTML 3.2) | Browser(通过嵌入式浏览器) |
Web 页面中的嵌入式控件 | Applet | JApplet | 主机控件(例如 OLE) |
其他控件的通用容器 | Panel | JPanel | Composite |
其他控件的有边界通用容器 | Panel(如果是手工画的) | 具有 Border 的 JPanel | Composite(SWT.BORDER) |
其他控件的有边界和标题的通用容器 | N/A | 具有 TitledBorder 的 JPanel | Group |
单选按钮(一个被选中) | Checkbox | JRadioButton | Button(SWT.RADIO) |
单选按钮的控件扩充 | CheckboxGroup | RadioButtonGroup | Group |
箭头按钮 | N/A | 具有图像的 JButton | Button(SWT.ARROW) |
支持文本显示方向 | 通过 ComponentOrientation | 与 AWT 相同 | 很多组件都可以支持这种风格 |
焦点切换 | Policy 和 Manager 对象 | 与 AWT 相同 | 下一个控件 |
定制对话框 | Dialog 子类 | JDialog 子类 | Dialog 子类 |
访问系统事件 | EventQueue 服务 | 与 AWT 相同 | Display 服务(不如 AWT 健壮) |
系统访问对话框 | FileDialog | JColorChooser、JFileChooser | ColorDialog、DirectoryDialog、FileDialog、FontDialog、PrintDialog |
显示简单消息对话框 | N/A(必须是 Dialog 子类) | JOptionPane 静态方法 | 具有很多风格的 MessageBox |
显示简单提示对话框 | N/A(必须是 Dialog 子类) | JOptionPane 静态方法 | N/A(JFace 中用来实现这种功能的子类) |
布局管理器 | BorderLayout、CardLayout、FlowLayout、GridLayout、GridBagLayout | AWT 加上 BoxLayout、CenterLayout、SpringLayout | FillLayout、FormLayout、GridLayout、RowLayout、StackLayout |
基本的绘图控件 | Canvas | JPanel | Canvas |
基本绘图 | Graphics 和 Graphics2D 对象 —— 基本形状和文本,任意 Shapes 和 Strokes、Bezier 以及文件 | 与 AWT 相同 | GC 对象 —— 基本形状和文本 |
绘图转换 | Affine,合成 | 与 AWT 相同 | N/A |
离屏绘图(Off screen drawing) | BufferedImage、drawImage | 与 AWT 相同 | Image、drawImage |
双缓冲区 | 手工 | 自动或手工 | 除非由主机控件提供,否则就是手工 |
打印 | PrintJob 和 PrintGraphics | 与 AWT 相同 | 向 Printer 设备绘图 |
定制颜色 | Color | 与 AWT 相同 | Color |
定制字体 | Font、FontMetrics | 与 AWT 相同 | Font |
光标选择 | Cursor | 与 AWT 相同 | Cursor |
图像特性 | 从文件中加载,动态创建,可扩充地编辑 | 与 AWT 相同 | 从文件中加载,动态创建,基本编辑 |
输入自动化 | Robot | 与 AWT 相同 | N/A |
显示工具条 | N/A | JToolBar | ToolBar、CoolBar |
显示进度条 | N/A | JProgressBar | ProgressBar |
将空间划分成区域 | N/A | JSplitPane | Sash 或 SashForm |
显示一个分标签页的区域 | N/A | JTabbedPane | TabFolder、CTabFolder |
显示制表信息 | N/A | JTable | Table |
格式化表的列 | N/A | TableColumn | TableColumn |
显示层次化信息 | N/A | JTree | Tree |
从一定范围的值中进行选择 | N/A | JSlider | Slider |
从一组离散范围的值中进行选择 | N/A | JSpinner | Scale |
对于基本显示的访问 | Toolkit、GraphicsConfiguration、GraphicsDevice | 与 AWT 相同 | Display |
将条目添加到系统托盘(system tray)中 | N/A | N/A | Tray |
关键:N/A —— 不适用。在很多情况中,这种特性都可以通过创建定制控件或控件容器或利用其他定制编程来实现,不过实现的难度会有所不同。 |
本文对 Eclipse 的 Standard Windows Toolkit with JFace、Java 的 Swing 和 Abstract Windows Toolkit GUI 工具包进行了比较。通过此处提供的比较,您可以确定在自己的新应用程序中应该使用哪个 GUI 工具包。
在大部分情况中,决定都是在 Swing 与结合了 JFace 的 SWT 之间进行的。通常来说,每个工具包都非常完整且功能强大,足以构建功能完善的 GUI,但是 Swing 通常要比单独使用 SWT(不使用 JFace 时)更好。Swing 具有内嵌于 Java 技术的优点,是完全可移植的,无可争议地是一种更好的架构。Swing 也具有高级图形应用程序所需要的优点。SWT 具有可以作为本地应用程序实现的优点,这可以提高性能,并利用基于 SWT 的 GUI 来实现本地兼容性。
如果您只为一种平台来开发系统,那么 SWT 就具有主机兼容性方面的优点,包括与主机特性的集成,例如在 Windows 上对 ActiveX 控件的使用。
<!-- CMA ID: 161757 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl -->学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
- 有关从 Swing 到 SWT 的迁移,请参阅 developerWorks 教程 “Migrate your Swing application to SWT”。
- 有关在 Eclipse 之外使用 SWT/JFace 的内容,请从 “在 Eclipse Workbench 之外使用 Eclipse GUI,第 1 部分: 单独使用 JFace 和 SWT” 开始阅读 developerWorks 的系列文章。
- 从 Sun 的 AWT package summary documentation 中学习更多有关 AWT 的知识。
- 从 Sun 的 Swing package summary documentation 中学习更多有关 Swing 的知识。还可以参阅 The Swing Connection、Swing 新闻页面以及教程 Creating a GUI with JFC/Swing。有关在线书籍,请参阅 O'Reilly 的 Java Foundation Classes in a Nutshell。
- 如果您是一个 SWT 和 JFace 方面的新手,请参阅 developerWorks 系列文章 “SWT 和 JFace,第 1 部分: 简介”,它介绍了有关创建简单 SWT 应用程序的知识。
- 请访问 developerWorks 的 Eclipse 项目资源,学习更多有关 Eclipse 的知识。
- 随时关注 developerWorks 技术事件和 Webcasts。
- 请访问 developerWorks 开放源码专区,获得广泛的 how-to 信息、工具以及项目更新,这些内容可以帮助您利用开放源码技术进行开发,并与 IBM 产品结合使用。
获得产品和技术
- 获取 Cogito,从 The Linux Kernel Archives 上获取 Linux® 内核源代码。
- 用 IBM 试用软件 改进您的下一个开放源码开发项目,该软件可以通过下载或 DVD 获得。
讨论
- 通过参与 developerWorks blogs 加入 developerWorks 社区。
Barry Feigenbaum 博士是 IBM Worldwide Accessibility Center 的成员,该中心协助 IBM 使其产品可供残障人士使用。Feigenbaum 博士已经发表了几本书籍和文章,他拥有多项专利,并在诸如 JavaOne 之类的业界会议上发表演讲。他曾担任位于奥斯汀的得克萨斯大学(University of Texas)和其他学校的计算机科学系的助理教授。
转自: http://www.ibm.com/developerworks/cn/opensource/os-swingswt/#resources
发表评论
-
基于maplefetion的飞信客户端v1.0
2010-12-22 19:28 1563基于maplefetion的飞信客户端,使用的solosky. ... -
暂停基于maplefetion的飞信客户端开发
2010-12-21 20:39 1291制作飞信客户端的动机原来是想发循环短信骚扰下同学,恶作剧一下( ... -
swt文本域文字换行
2010-12-21 13:35 4271看见csdn下载,文本域文字换行代码,居然要十分. 下面的代码 ... -
swt布局管理之FillLayout(学习笔记)
2010-12-20 18:21 2592FillLayout(充满式布局): 在单选或者单列中放置相同 ... -
swt布局管理初探
2010-12-20 15:53 2367swt布局管理初探 swt五种常见的布局: 1. FillL ... -
飞信对话窗口
2010-12-18 13:45 1147昨天做完的飞信聊天窗口,只能单向发送飞信消息. 今天完成了飞信 ... -
刚出炉的飞信聊天窗口
2010-12-17 21:14 940刚出炉的飞信聊天窗口,终于可以给好友送短信了了. -
飞信主界面 v2
2010-12-15 21:49 1083飞信主界面 v2 完成用户状态的改变体现在主界面上. 分组 ... -
SWT树指定位置插入节点
2010-12-15 19:18 1285SWT树指定位置插入节点 public TreeItem ... -
删除SWT树中一个结点
2010-12-15 19:09 2033删除SWT树中一个结点. SWT Tree类中目前我发现只有 ... -
飞信主界面
2010-12-14 21:45 933我用SWT做的飞信主界面真丑... 待续 -
晒晒刚做完的飞信登录程序
2010-12-13 13:13 1135登录官方飞信PC客户端后,启动自己做的飞信登录程序,成功连接后 ... -
区别Display.getDefault()与Display.getCurrent()
2010-12-12 19:44 3665Display.getDefault(): 该方法会返回用户图 ... -
maplefetion-2.5.1包依赖问题
2010-12-11 15:51 1180近来在研究maplefetion api,试着制作一个简单的飞 ... -
[转]飞信第三方开发相关资源
2010-12-07 18:39 1886[转]飞信第三方开发相关资源 一、飞信的第三方程序和开发库 L ... -
org.eclipse.swt.SWTException: Subclassing not allowed
2010-12-07 15:37 2891错误: org.eclipse.swt.SWTExceptio ... -
(修正)SWT标签背景透明
2010-12-06 20:38 7730(修正)SWT标签背景透明 之前用下面方法,以为解决了背景 ... -
SWT窗口禁用最大化
2010-12-06 19:59 3165SWT中的窗口窗口样式 Shell shell = new ... -
初学SWT错误
2010-12-03 14:45 1099ERROR: JDWP Unable to get JNI 1 ...
相关推荐
### SWT、Swing 或 AWT:哪个更适合您 在选择合适的图形用户界面(GUI)工具包时,开发者面临着多种选项,其中包括Eclipse的SWT、Java Swing和Abstract Window Toolkit(AWT)。每种工具包都有其独特的优势和局限性...
【SWT、Swing、AWT 之间的差异】 在Java GUI开发中,SWT(Standard Widget Toolkit)、Swing和AWT(Abstract Window Toolkit)是三种常见的工具包。它们各自拥有不同的特性和优缺点,适用于不同场景。 **AWT...
swt swing awt的区别
在Java编程领域,Swing、AWT和SWT都是用于构建图形用户界面(GUI)的框架。本篇文章将详细介绍如何在Eclipse集成开发环境中(IDE)搭建这些框架的开发环境,以及可以使用的相关插件。 首先,让我们从AWT(Abstract ...
本文将深入分析Swing、SWT和AWT的区别和联系,并探讨它们各自的功能特点,帮助开发者做出更优化的选择。 首先,AWT(Abstract Window Toolkit)是Java最早提供的GUI工具包之一。AWT是Java的基础类库中的一个部分,...
在Java编程环境中,SWT(Standard Widget Toolkit)和AWT(Abstract Window Toolkit)以及SWING是三种常用的图形用户界面(GUI)开发库。SWT主要为Eclipse IDE提供支持,而AWT和SWING则是Java标准库的一部分。这篇...
SWT,由Eclipse项目开发,旨在提供比AWT和Swing更好的性能和更接近原生操作系统的用户体验。SWT结合了AWT的底层系统访问和Swing的丰富组件库。它使用本地API直接与操作系统交互,提供更高效的组件和更真实的平台外观...
在Java编程语言中,SWT(Standard Widget Toolkit)、AWT(Abstract Window Toolkit)和Swing是用于构建图形用户界面(GUI)的三个重要库。这三个库各有特点,但都提供了事件处理机制,允许用户与应用程序进行交互。...
在Java中,有三个主要的GUI工具包:AWT(Abstract Window Toolkit),SWT(Standard Widget Toolkit)和Swing。 1. AWT(Abstract Window Toolkit): AWT是Java最早提供的GUI库,它是Java的基础GUI组件集合。AWT...
### 图形界面开发——AWT、Swing、SWT #### 18.1 图形界面简介 **18.1.1 概述** 在介绍AWT、Swing、SWT之前,我们先来简单了解一下图形用户界面(GUI)的概念及其在Java开发中的重要性。随着计算机技术的发展,用户...
通过学习AWT、Swing和SWT这三个主要的图形界面工具包,开发者可以更好地理解和掌握Java图形界面开发的基本原理和技术细节。无论是初学者还是有经验的开发者,都应该熟悉这些工具包的特点和应用场景,以便能够根据...
Swing组件基于抽象窗口工具包(AWT),但增加了许多功能和改进,比如轻量级组件模型,使得Swing应用程序运行速度更快,占用资源更少。 1. **Swing组件**:例如在提供的代码中可能包括了JFrame(主窗口)、JButton...
3. **第十八章_图形界面开发--AWT,Swing,SWT.pdf** - 这个章节可能涵盖了AWT、Swing以及另一个GUI库SWT(Standard Widget Toolkit)的比较和使用,SWT是Eclipse IDE所采用的GUI库,它结合了AWT和Swing的优点。...
SWT,AWT/Swing外,java的另一种桌面窗口程序的开发包。做JAVA桌面窗口开发,我们有了更多的选择。此API是我自己生成的。对应的SWT版本是我网上下的最新的,版本是swt-3.4,里面没有API。网上也没找到最新版本的,我...
Eclipse作为一款强大的集成开发环境(IDE),提供了丰富的插件支持,其中包括针对AWT和Swing的可视化设计工具,如"jigloo_SWT_Swing可视化设计工具"。这个插件使得开发者可以通过拖放的方式来构建和设计GUI界面,...
- **易用性**:Swing 在 API 设计上相对更易于使用,而 SWT 的 API 更接近于原生的窗口编程,可能需要更多的学习成本。 - **社区支持**:Swing 由于发布时间较长,拥有更广泛的社区支持和资源。 #### 4. 如何最小化...
### 第十八章 图形界面开发——AWT,Swing,SWT #### 18.1 图形界面简介 ##### 18.1.1 概述 在本章中,我们将探讨Java图形用户界面(GUI)开发的核心概念和技术。虽然在Java开发中,Web应用程序占据了主导地位,但...
相较于传统的AWT和Swing,SWT具有显著的优势,尤其是在性能和外观方面。 **SWT的核心设计理念**: - **最大化利用本地UI库**:SWT尽可能地调用操作系统的原生图形组件API,仅在必要时才使用自己的模拟实现。 - **...
AWT是早期Java GUI开发的基础,而Swing是在AWT的基础上发展起来的,提供了更丰富的功能和更好的平台一致性。 **AWT**是Java SDK的组成部分,它提供了基本的GUI组件,如按钮、列表、菜单和文本框。AWT的主要特点是它...