Swing(スィング)は、JDK1.2 でサポートされた AWT よりも新しい GUIコンポーネントです。AWT に対して以下のような特徴があります。
AWT に対応する Swing の部品には次のようなものがあります。
| カテゴリ | 種類 | AWT | Swing |
|---|---|---|---|
| ウィンドウ | フレーム | Frame | JFrame |
| ダイアログ | Dialog | JDialog | |
| 部品 | ボタン | Button | JButton |
| トグルボタン | × | JToggleButton | |
| ラベル | Label | JLabel | |
| テキストフィールド | TextField | JTextField | |
| テキストエリア | TextArea | JTextArea | |
| チェックボックス | Checkbox | JCheckBox | |
| ラジオボタン | × | JRadioButton | |
| コンボボックス | Choice | JComboBox | |
| リスト | List | JList | |
| スクロールバー | Scrollbar | JScrollBar | |
| テーブル | × | JTable | |
| ツリー | × | JTree | |
| プログレスバー | × | JProgressBar | |
| ペイン | パネル | Panel | JPanel |
| スクロールペイン | ScrollPane | JScrollPane | |
| タブペイン | × | JTabbedPane | |
| キャンバス | Canvas | ? | |
| メニュー | メニューバー | MenuBar | JMenuBar |
| ツールバー | × | JToolBar | |
| ステータスバー | × | ※ | |
| ポップアップメニュー | PopupMenu | JPopupMenu |

Swing では フレーム の作成に、Frame の代わりに JFrame を使用します。下記は、JFrame を表示するだけのシンプルなサンプルです。
import java.awt.*;
import javax.swing.*;
class JFrameTest extends JFrame {
JFrameTest() {
getContentPane().setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("JFrameTest");
setSize(200, 100);
setVisible(true);
}
public static void main(String [] args) {
new JFrameTest();
}
}
AWT の Frame サンプルと比べると下記のような違いがあります。

ボタン は JButton クラスを用います。

トグルボタン は、1回ボタンを押すごとに、オン・オフの状態が切り替わるボタンです。JToggleButton クラスを用います。

テキストフィールド には JTextField クラスを用います。

テキストエリア には JTextArea クラスを用います。

チェックボックス には JCheckBox クラスを用います。ActionListener でもチェックボックスをクリックされたことを監視可能ですが、チェックボックスのオン・オフ変化を確実に監視するには、ChangeListener(javax.swing.event)を用いるのが無難です。ButtonGroup によるグルーピングも可能です。

ラジオボタン には JRadioButton クラスを用います。ButtonGroup でグループ化することにより、グループ内のオン状態のボタンが常にひとつになるように制御することができます。

コンボボックス には JComboBox クラスを用います。キーボードで選択操作する場合、キー移動する度に actionPerformed() が呼ばれるので注意してください。

リスト には JList クラスを用います。

スクロールバー には JScrollBar クラスを用います。テキストエリアや、テーブルなどの部品にスクロールバーをつけるには、JScrollBar ではなく JScrollPane を用います。

プログレスバー には JProgressBar クラスを用います。時間のかかる処理の経過状況などを表示するのに用いられます。

テーブル には JTable クラスを用います。通常のテーブルは、セルの編集は可能ですが、行や列を追加・削除することができません。行や列を追加削除するには TableModel を用います。基本的な TableModel として、DefaultTableModel を用いた例をサンプルに示しています。

ツリー を作成するには JTree クラスを用います。

メニュー を作成するには、主に下記の 4つのクラスを用います。
| クラス | 説明 |
|---|---|
| JMenuBar | メニューバー。 |
| JMenu | メニュー。子アイテムを持つメニュー項目。 |
| JMenuItem | メニューアイテム。子アイテムを持たないメニュー項目。 |
| JCheckBoxMenuItem | チェックタイプのメニューアイテム。 |
MenuBar の場合は Menu と CheckBoxMenuItem にアクションリスナーを追加していましたが、JMenuBar の場合はそれぞれのメニューアイテムにアクションリスナーを登録します。

ツールバー を作成するには JToolBar クラスを用います。ツールバーの上には、JButton で作成したボタンなどを配置することができます。

Swing ではステータスバー専用の部品はサポートされていません。代わりに、JLabel で生成したラベルを BorderLayout.SOUTH に貼り付けることで、ステータスバーを模倣することができます。

JTextArea、JList、JTree などの部品に スクロールバー をつけるには、スクロールペイン(JScrollPane)の中にこれらの部品を貼り付けます。

画面をタブ付きのペインで切り替えるには、タブペイン(JTabbedPane)を用います。

画面を左右や上下に分割するには、スプリットペイン(JSplitPane)を用います。

ダイアログ を表示するには JDialog を用います。通常、JDialog のサブクラスを作成し、そのサブクラスのインスタンスを生成してダイアログを表示します。

ポップアップメニュー を表示するには JPopupMenu を用います。

パネル(JPanel)は、より柔軟なレイアウトを実現する際に用いられます。フレームやダイアログ上に複数のパネルを配置し、パネル内に部品を配置することにより、通常の XxxxLayout では表現できないレイアウトを実現します。「パネルによるレイアウト」を参照してください。
![]() |
![]() |
![]() |
| Metal | Windows | Motif |
|---|
Swing では、GUI のルック&フィールを動的に変更することができます。現状では、Metalモード、Windowsモード、Motifモードがサポートされています。