Table 1. SWT vs. AWT and Swing Feature comparison
Function/Role/Aspect | AWT | Swing | SWT (style) |
---|---|---|---|
Display static text | Label | JLabel | Label, CLabel |
Display multi-line static text | Multiple Labels | Multiple JLabels or JLabel with HTML content | Multiple Labels or Label with newlines |
Display multi-line formatted static text | Multiple Labels with different fonts | JLabel with HTML content | Multiple Labels with different fonts |
Single-line text entry | TextField | JTextField | Text(SWT.SINGLE) |
Multi-line text entry | TextArea | JTextArea | Text(SWT.MULTI) |
Display an image | N/A | JLabel | Label |
Display text and image | N/A | JLabel | CLabel |
ToolTip pop-up help | N/A | setToolTip on component, subclass JToolTip | setToolTip on control |
Styled text entry | N/A | JEditorPane | StyledText |
Select from list of items | List | JList | List |
Simple push button with text | Button | JButton | Button(SWT.PUSH) |
Simple push button with text and/or image | N/A | JButton | Button(SWT.PUSH) |
Drawing area; possibly for custom controls | Canvas | JPanel | Canvas |
On/off check box | CheckBox | JCheckBox | Button(SWT.CHECK) |
Radio selection | CheckBoxGroup | ButtonGroup and menus | Group and Menu |
Select from a drop-down list | Choice | JComboBox | Combo, CCombo |
Enter text or select from a drop-down list | N/A | JComboBox | Combo, CCombo |
Scrollable area | ScrollPane | JScrollPane | Create Scrollable subclass |
Top level windows | Dialog, Frame, Window | JDialog, JFrame, JWindow | Shell with different styles |
Generic window | Window | JWindow | Shell |
Frame window | Frame | JFrame | Shell(SWT.SHELL_TRIM) |
Dialog window | Dialog | JDialog | Shell(SWT.DIALOG_TRIM) |
Menu | Menu | JMenu | Menu |
MenuItem | MenuItem | JMenuItem | MenuItem |
Menu shortcuts | Generic keystrokes | same as AWT | host dependent mnemonics and accelerators |
Pop-up menu | PopupMenu | JPopupMenu | Menu(SWT.POPUP) |
Menu bars | MenuBar | JMenuBar | Menu(SWT.BAR) |
Display an insertion caret | N/A | Caret | Caret |
Web browser | N/A | JTextPane (HTML 3.2) | Browser (via embedded browser) |
Embed control in web page | Applet | JApplet | Host control (ex. OLE) |
Generic container of other controls | Panel | JPanel | Composite |
Generic container of other controls with a border | Panel (if drawn manually) | JPanel with a Border | Composite(SWT.BORDER) |
Generic container of other controls with a border and title | N/A | JPanel with a TitledBorder | Group |
Radio button (one of set on) | Checkbox | JRadioButton | Button(SWT.RADIO) |
Control extent of radio buttons | CheckboxGroup | RadioButtonGroup | Group |
Arrow buttons | N/A | JButton with image | Button(SWT.ARROW) |
Supports int'l text orientations | via ComponentOrientation | same as AWT | Many components support styles for this |
Focus Traversal | Policy and Manager objects | same as AWT | Next on control |
Custom dialogs | Dialog subclass | JDialog subclass | Dialog subclass |
Access to system events | EventQueue services | same as AWT | Display services (less robust than AWT) |
System access dialogs | FileDialog | JColorChooser, JFileChooser | ColorDialog, DirectoryDialog, FileDialog, FontDialog, PrintDialog |
Display simple message dialog | N/A (must subclass Dialog) | JOptionPane static methods | MessageBox with numerous styles |
Display simple prompting dialog | N/A (must subclass Dialog) | JOptionPane static methods | N/A (classes exist in JFace to do this) |
Layout managers | BorderLayout, CardLayout, FlowLayout, GridLayout, GridBagLayout | AWT plus BoxLayout, CenterLayout, SpringLayout | FillLayout, FormLayout, GridLayout, RowLayout, StackLayout |
Basic drawing control | Canvas | JPanel | Canvas |
Basic drawing | Graphics and Graphics2D objects - Basic shapes and text, arbitrary Shapes and Strokes, Bezier, fills, etc. | same as AWT | GC object - Basic shapes and text |
Drawing transforms | Affine, composites | same as AWT | N/A |
Off screen drawing | BufferedImage, drawImage | same as AWT | Image, drawImage |
Double buffering | Manual | Automatic or manual | Manual unless provided by host control |
Printing | PrintJob and PrintGraphics | same as AWT | draw to Printer device |
Custom colors | Color | same as AWT | Color |
Custom fonts | Font, FontMetrics | same as AWT | Font |
Cursors selection | Cursor | same as AWT | Cursor |
Image features | load from file, create dynamically, extensive edits | same as AWT | load from file, create dynamically, basic edits |
Input automation | Robot | same as AWT | N/A |
Display a tool bar | N/A | JToolBar | ToolBar, CoolBar |
Display a progress bar | N/A | JProgressBar | ProgressBar |
Divide space between areas | N/A | JSplitPane | Sash or SashForm |
Display tabbed areas | N/A | JTabbedPane | TabFolder, CTabFolder |
Display tabular info | N/A | JTable | Table |
Format table columns | N/A | TableColumn | TableColumn |
Display hierarchical info | N/A | JTree | Tree |
Select from range of values | N/A | JSlider | Slider |
Select from discrete range of values | N/A | JSpinner | Scale |
Access to the base display | Toolkit, GraphicsConfiguration, GraphicsDevice | same as AWT | Display |
Add items to the system tray | N/A | N/A | Tray |
Key: N/A - Not available. In many cases, this feature can be created, with varying degrees of difficulty, by creating custom controls or containers of controls or by other custom programming. |
作者最后得出的结论是如果你只开发用于某一特性平台(当然,只能是主流平台),SWT就有优势了,它可以集成这些平台的特有的功能。例如在Windows下使用ActiveX控件。