技术开发 频道

SWT、Swing 或 AWT:哪个更适合您?

  下表对 AWT、SWT 和 Swing 库的很多特性进行了比较,这种比较并没有按照任何特定顺序来进行。尽管没有完全列出所有特性,但是列出了很多最重要的特性。

  表 1. SWT 、AWT 和 Swing 特性的比较

功能/角色/外表AWTSwingSWT(风格)
显示静态文本LabelJLabelLabel, CLabel
显示多行静态文本Multiple Labels具有 HTML 内容的 Multiple JLabels 或 JLabel具有新行的 Multiple Labels 或 Label
显示多行格式化静态文本具有不同字体的 Multiple Labels具有 HTML 内容的 JLabel具有不同字体的 Multiple Labels
单行文本输入TextFieldJTextFieldText(SWT.SINGLE)
多行文本输入TextAreaJTextAreaText(SWT.MULTI)
显示图像N/AJLabelLabel
显示文本和图像N/AJLabelCLabel
提示弹出帮助N/A组件的 setToolTip,JToolTip 子类控件的 setToolTip
风格化的文本输入N/AJEditorPaneStyledText
从条目列表中进行选择ListJListList
简单按下具有文本的按钮ButtonJButtonButton(SWT.PUSH)
简单按下具有文本或图像的按钮N/AJButtonButton(SWT.PUSH)
绘图区域;可能用于定制控件CanvasJPanelCanvas
选中/取消复选框CheckBoxJCheckBoxButton(SWT.CHECK)
单选按钮选择CheckBoxGroupButtonGroup 和 MenuGroup 和 Menu
从一个下拉列表中选择ChoiceJComboBoxCombo、CCombo
输入文本或从下拉列表中选择N/AJComboBoxCombo、CCombo
可滚动区域ScrollPaneJScrollPane创建 Scrollable 子类
顶层窗口Dialog、Frame、WindowJDialog、JFrame、JWindow具有不同风格的 Shell
通用窗口WindowJWindowShell
框架窗口FrameJFrameShell(SWT.SHELL_TRIM)
对话框窗口DialogJDialogShell(SWT.DIALOG_TRIM)
菜单MenuJMenuMenu
MenuItemMenuItemJMenuItemMenuItem
菜单快捷键通用击键与 AWT 相同依赖于主机的快捷键
弹出菜单PopupMenuJPopupMenuMenu(SWT.POPUP)
菜单条MenuBarJMenuBarMenu(SWT.BAR)
显示插入符号N/ACaretCaret
Web 浏览器N/AJTextPane(HTML 3.2)Browser(通过嵌入式浏览器)
Web 页面中的嵌入式控件AppletJApplet主机控件(例如 OLE)
其他控件的通用容器PanelJPanelComposite
其他控件的有边界通用容器Panel(如果是手工画的)具有 Border 的 JPanelComposite(SWT.BORDER)
其他控件的有边界和标题的通用容器N/A具有 TitledBorder 的 JPanelGroup
单选按钮(一个被选中)CheckboxJRadioButtonButton(SWT.RADIO)
单选按钮的控件扩充CheckboxGroupRadioButtonGroupGroup
箭头按钮N/A具有图像的 JButtonButton(SWT.ARROW)
支持文本显示方向通过 ComponentOrientation与 AWT 相同很多组件都可以支持这种风格
焦点切换Policy 和 Manager 对象与 AWT 相同下一个控件
定制对话框Dialog 子类JDialog 子类Dialog 子类
访问系统事件EventQueue 服务与 AWT 相同Display 服务(不如 AWT 健壮)
系统访问对话框FileDialogJColorChooser、JFileChooserColorDialog、DirectoryDialog、FileDialog、FontDialog、PrintDialog
显示简单消息对话框N/A(必须是 Dialog 子类)JOptionPane 静态方法具有很多风格的 MessageBox
显示简单提示对话框N/A(必须是 Dialog 子类)JOptionPane 静态方法N/A(JFace 中用来实现这种功能的子类)
布局管理器BorderLayout、CardLayout、FlowLayout、GridLayout、GridBagLayoutAWT 加上 BoxLayout、CenterLayout、SpringLayoutFillLayout、FormLayout、GridLayout、RowLayout、StackLayout
基本的绘图控件CanvasJPanelCanvas
基本绘图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/AJToolBarToolBar、CoolBar
显示进度条N/AJProgressBarProgressBar
将空间划分成区域N/AJSplitPaneSash 或 SashForm
显示一个分标签页的区域N/AJTabbedPaneTabFolder、CTabFolder
显示制表信息N/AJTableTable
格式化表的列N/ATableColumnTableColumn
显示层次化信息N/AJTreeTree
从一定范围的值中进行选择N/AJSliderSlider
从一组离散范围的值中进行选择N/AJSpinnerScale
对于基本显示的访问Toolkit、GraphicsConfiguration、GraphicsDevice与 AWT 相同Display
将条目添加到系统托盘(system tray)中N/AN/ATray
关键: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 控件的使用。

0
相关文章