有父容器,子控件也就不存在了;通常父容器都不能在以后任意改变。这种方法不如 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 中。
SWT、Swing或AWT:哪个更适合您?(10)
时间:2011-12-08 ibm Barry Feigenbaum
特性的比较
下表对 AWT、SWT 和 Swing 库的很多特性进行了比较,这种比较并没有按照任何特定顺序来进行。尽管没有完全列出所有特性,但是列出了很多最重要的特性。
表 1. SWT 、AWT 和 Swing 特性的比较
功能/角色/外表 |
AWT |
Swing |
SWT(风格) |
显示静态文本 |
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 —— 不适用。在很多情况中,这种特性都可以通过创建定制控件或控件容器或利用其他定制编程来实现,不过实现的难度会有所不同。 |
|