モジュール java.desktop

パッケージjavax.swing


パッケージjavax.swing
すべてのプラットフォーム上で可能なかぎり同じように機能する「軽量」(Java共通言語)コンポーネントのセットを提供します。 これらのコンポーネントの使用方法に関するプログラマ向けガイドについては、『The Java Tutorial』の「Creating a GUI with JFC/Swing」を参照してください。 その他のリソースについては、「関連ドキュメント」を参照してください。

Swingのスレッド・ポリシー

通常、Swingはスレッドに対して安全ではありません。 すべてのSwingコンポーネントと関連クラスには、特に説明がないかぎり、イベント・ディスパッチ・スレッド上でアクセスしてください。

通常のSwingアプリケーションは、ユーザーのジェスチャによって生成されたイベントに応じて、処理を実行します。 たとえば、ユーザーがJButtonをクリックすると、JButtonに追加されたすべてのActionListenersに通知が送信されます。 ユーザーのジェスチャによって生成されたすべてのイベントはイベント・ディスパッチ・スレッド上でディスパッチされるので、開発者が制限の影響を受けることは、ほとんどありません。

ただし、Swingアプリケーションの構築時と表示時には影響があります。 イベント・ディスパッチ・スレッド上では、アプリケーションのmainメソッドの呼出しやApplet内のメソッドの呼出しは行われません。 このため、アプリケーションやアプレットの構築時および表示時には、イベント・ディスパッチ・スレッドに制御を渡していることを確認してください。 制御を渡し、Swingの処理を開始するためには、invokeLaterを使用することをお薦めします。 invokeLaterメソッドは、Runnableがイベント・ディスパッチ・スレッド上で処理されるようにスケジュールします。 次に、Swingアプリケーションに制御を渡し、Swingアプリケーションを起動する例を2つ示します。どちらの方法も適切です。

 import javax.swing.SwingUtilities;

 public class MyApp implements Runnable {
     public void run() {
         // Invoked on the event dispatching thread.
         // Construct and show GUI.
     }

     public static void main(String[] args) {
         SwingUtilities.invokeLater(new MyApp());
     }
 }
または:
 import javax.swing.SwingUtilities;

 public class MyApp {
     MyApp(String[] args) {
         // Invoked on the event dispatching thread.
         // Do any initialization here.
     }

     public void show() {
         // Show the UI.
     }

     public static void main(final String[] args) {
         // Schedule a job for the event-dispatching thread:
         // creating and showing this application's GUI.
         SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                 new MyApp(args).show();
             }
         });
     }
 }
この制約は、Swingコンポーネントに接続されたモデルにも適用されます。 たとえば、TableModelJTableに接続されている場合、TableModelの変更は必ずイベント・ディスパッチ・スレッド上で行うようにしてください。 別のスレッド上でモデルを変更した場合、例外が発生し、画面の表示が崩れる可能性があります。

イベント・ディスパッチ・スレッド上で実行すると、UIに直ちに更新を加えるのは一般的に安全ですが、例外があります : UIリスナーが保留中の変更を反映するようにUIが更新される前にUIをさらに変更しようとすると、UIが正しくレンダリングされないことがあります。 これは、アプリケーションがインストールされたリスナーが、モデル構造の変更を引き起こすイベントにレスポンスしてUIを更新する必要がある場合に発生します。 リスナーが呼び出される順序が保証されていないため、最初にコンポーネント・インストール・リスナーがこの変更を処理できるようにすることが重要です。 解決策は、アプリケーション・リスナーがSwingUtilities.invokeLater(Runnable)を使用して変更を加えることで、コンポーネントによってインストールされたすべてのモデル・リスナーの後処理がUIレンダリングに行われるようにすることです。

すべてのイベントはイベント・ディスパッチ・スレッド上で配信されるので、イベント処理時に注意してください。 特に、イベント・ディスパッチ・スレッド上で、ネットワーク入出力や計算量の多い処理など、時間のかかるタスクを実行すると、その他のイベントのディスパッチがブロックされます。 イベント・ディスパッチ・スレッドがブロックされている間、アプリケーションはユーザーの入力に一切反応しなくなります。 Swingの使用時にこのような処理を実行する場合は、SwingWorkerの説明に従うことをお勧めします。

このトピックの詳細は、『The Swing Tutorial』(特に「 Concurrency in Swing」のセクション)を参照してください。

関連ドキュメント

概要、チュートリアル、例、ガイド、その他のマニュアルについては、次を参照してください。
  • クラス
    説明
    このクラスは、JFCのActionインタフェースのデフォルト実装を提供します。
    ボタンおよびメニュー項目の共通動作を定義します。
    CellEditorsの基底クラスであり、getCellEditorValue()を除くCellEditorインタフェースのメソッドのデフォルトの実装を提供します。
    Listにその内容を提供するデータ・モデルの抽象定義です。
    このクラスでは、ほとんどの具象SpinnerModel実装に適するSpinnerModelインタフェースのChangeListener部分を提供します。
    Actionインタフェースは、同じ機能が複数のコントロールによってアクセスされる場合に、ActionListenerインタフェースに対する便利な拡張機能を提供します。
    ActionMapは、キーまたはActionと呼ばれるObjectからActionへのマップを提供します。
    標準的なBorderオブジェクトを提供するためのファクトリ・クラスです。
    SliderProgressBarなどのコンポーネントが使用するデータ・モデルを定義します。
    BoxLayoutオブジェクトをレイアウト・マネージャとして使う軽量なコンテナです。
    レイアウトに含まれるがビューを持たない軽量コンポーネントの実装です。
    複数のコンポーネントを、垂直方向にも水平方向にも配置できるようにする、レイアウト・マネージャです。
    複数のボタンのセットに多重排他スコープを設定するために使用します。
    ボタンの状態モデルです。
    このインタフェースは、どの汎用エディタでも実装できるメソッドを定義します。
    このクラスは、セル・レンダラとそれを使うコンポーネントの間に挿入されます。
    JComboBoxコンポーネントに使われるエディタ・コンポーネントです。
    コンボボックスのデータ・モデルです。
    ComponentInputMapは、特定のJComponentに関連付けられているInputMapです。
    グラフィックスのデバッグをサポートするGraphicsのサブクラスです。
    BoundedRangeModelのジェネリック実装です。
    Buttonコンポーネントのデータ・モデルのデフォルト実装です。
    テーブルとツリー・セルのデフォルト・エディタです。
    コンボボックスのデフォルト・モデルです。
    DesktopManagerの実装です。
    このクラスは1.4 focus APIでは現在使用されていません。
    リスト内の項目をレンダリングします。
    UIResourceを実装するDefaultListCellRendererのサブクラスです。
    このクラスはjava.util.Vector APIを柔軟に実装します。1.1.xのjava.util.Vectorを実装しますが、コレクション・クラスはサポートせず、変更発生時にはListDataListenerに通知します。
    リスト選択のデフォルト・データ・モデルです。
    グリッド・ベースのデータ・モデルのソートやフィルタの適用を行うRowSorterの実装です。
    DefaultRowSorter.ModelWrapperは、DefaultRowSorterでソートされるデータを提供します。
    SingleSelectionModelのジェネリック実装です。
    DesktopManagerオブジェクトは、JDesktopPaneオブジェクトによって所有されます。
    メソッドの特定に使用するドロップ・モードです。ドラッグ・アンド・ドロップのときに、コンポーネントは、このメソッドを使ってドロップの位置を追跡して示します。
    このクラスは1.4 focus APIでは現在使用されていません。
    イメージをグレー・スケールに変換し、イメージ内のピクセルの明度を上げることによって、イメージを「無効にする」イメージ・フィルタです。
    GroupLayoutは、Container内に配置するためにコンポーネントを階層的にグループ化するLayoutManagerです。
    ParallelGroupがその子を配置するときに選択できる方法の列挙です。
    通常はコンポーネントを装飾するために使う、固定サイズの小型イメージです。
    アイコンをイメージからペイントするIconインタフェースの実装です。
    InputMapは、入力イベント(現在はKeyStrokeのみ使用)とObjectの間のバインディングを提供します。
    このクラスは、Swingコンポーネントの検証メカニズムを提供します。
    JInternalFrameの初期Componentを判定するためのアルゴリズムを任意に提供できるFocusTraversalPolicyです。
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    アプレットAPIは非推奨であり、代替はありません。
    「プッシュ」ボタンの実装です。
    チェックボックス(選択または選択解除が可能で、その状態をユーザーに表示する項目)の実装です。
    選択または選択解除できるメニュー項目です。
    JColorChooserは、ユーザーが色を操作したり、選択したりできるように設計されたコントロールのペインを提供します。
    ボタンまたは編集可能フィールドとドロップ・ダウン・リストを組み合わせたコンポーネントです。
    KeySelectionManagerを定義するインタフェースです。
    トップ・レベルのコンテナを除くすべてのSwingコンポーネントの基底クラスです。
    マルチドキュメント・インタフェースまたは仮想デスクトップを生成するコンテナです。
    ダイアログ・ウィンドウを作成するためのメイン・クラスです。
    さまざまな種類のコンテンツを編集するためのテキスト・コンポーネントです。
    JFileChooserは、ユーザーがファイルを選択するための単純なメカニズムを提供します。
    JFormattedTextFieldJTextFieldを拡張して、任意の値をフォーマットしたり、ユーザーがテキストを編集したあとに特定のオブジェクトを取得したりするためのサポートを追加します。
    AbstractFormatterのインスタンスは、ObjectからStringおよびStringからObjectへの変換を処理するためにJFormattedTextFieldで使用されます。
    AbstractFormatterFactoryのインスタンスはJFormattedTextFieldで使用され、値のフォーマットに使用されるAbstractFormatterのインスタンスを取得します。
    JFC/Swingコンポーネント・アーキテクチャのサポートを追加するjava.awt.Frameの拡張バージョン。
    ネイティブなフレームに、ドラッグ、クローズ、アイコン化、サイズ変更、タイトル表示、およびメニュー・バーのサポートなど、多くの機能を提供する軽量オブジェクトです。
    このコンポーネントは、JInternalFrameのアイコン化されたバージョンを表します。
    短いテキスト文字列やイメージの表示領域です。両方を一緒に表示することもできます。
    JLayer<V extends Component>
    JLayerは、さまざまな高度なペイント効果を実装したり、そのボーダー内で生成されるすべてのAWTEventの通知を受信したりするために使用できる、Swingコンポーネントのための汎用のデコレータです。
    JLayeredPaneはJFC/Swingコンテナに深さを追加し、コンポーネントが必要に応じて互いにオーバーラップできるようにします。
    オブジェクトのリストを表示し、ユーザーが1つまたは複数のオブジェクトを選択できるようにするコンポーネントです。
    TransferHandler.DropLocationのサブクラスであり、JListのドロップ位置を表します。
    メニュー(ユーザーがJMenuBarの項目を選択したときに表示される、JMenuItemを含むポップアップ・ウィンドウ)の実装です。
    メニュー・バーの実装です。
    メニューの項目の実装です。
    JOptionPaneは、ユーザーに値の入力を求めたり、何らかの情報を通知したりするための標準のダイアログ・ボックスを容易にポップアップできるようにします。
    JPanelは、汎用の軽量コンテナです。
    JPasswordFieldは、1行のテキストの編集を可能にする軽量コンポーネントです。何かが入力されたことはビューに示されますが、元の文字は表示されません。
    ポップアップ・メニュー(一連の選択肢をポップアップおよび表示する小さなウィンドウ)の実装です。
    ポップアップ・メニュー固有のセパレータです。
    一部のタスクの進捗状況を視覚的に表示するコンポーネントです。
    ラジオ・ボタン(選択または選択解除が可能で、その状態をユーザーに表示する項目)の実装です。
    ラジオ・ボタン・メニュー項目の実装です。
    JFrameJDialogJWindowJApplet、およびJInternalFrameによって内部的に使用される軽量コンテナ。
    スクロール・バーの実装です。
    軽量コンポーネントのスクロール可能なビューを提供します。
    JSeparatorは、区切り線を実装するための汎用的なコンポーネントを提供します。もっとも一般的には、メニュー項目を論理的なグループに分割するための項目間の区切り線として使用されます。
    ユーザーが指定された区間内でノブをスライドすることによりグラフィカルに値を選択できるようにするコンポーネントです。
    ユーザーが、順序付けられたシーケンスから数またはオブジェクトを選択できるようにする単一行の入力フィールドです。
    モデルがSpinnerDateModelであるJSpinnerのエディタ。
    JFormattedTextFieldを使用してモデルの現在の値の読取り専用ビューを表示する、より特殊なエディタの単純な基底クラス。
    モデルがSpinnerListModelであるJSpinnerのエディタ。
    モデルがSpinnerNumberModelであるJSpinnerのエディタ。
    JSplitPaneは、2つ(2つだけ)のComponentを分割するために使用されます。
    指定されたタイトルやアイコンを持つタブをクリックすることにより、ユーザーがコンポーネントのグループを切り替えられるようにするコンポーネントです。
    JTableは、セルの通常の2次元テーブルを表示および編集するために使用されます。
    TransferHandler.DropLocationのサブクラスであり、JTableのドロップ位置を表します。
    JTableの出力に使用する出力モードです。
    JTextAreaは、プレーン・テキストを表示する複数行の領域です。
    JTextFieldは、1行のテキストの編集を可能にする軽量コンポーネントです。
    グラフィックで表現される属性でマークアップできるテキスト・コンポーネントです。
    2つの状態を持つボタンの実装です。
    ToggleButtonモデルです
    JToolBarは、一般的に使用されるActionまたはコントロールを表示するのに役立つコンポーネントを提供します。
    ツールバー独自のセパレータです。
    Componentの「ヒント」を表示するために使います。
    階層データのセットをアウトラインとして表示するコントロール。
    TransferHandler.DropLocationのサブクラスであり、JTreeのドロップ位置を表します。
    DynamicUtilTreeNodeは、ベクター、ハッシュ・テーブル、配列、および文字列をラップし、必要に応じて適切な子ツリー・ノードを作成できます。
    EmptySelectionModelは、何の選択も許可しないTreeSelectionModelです。
    ベースとなる情報を見るために使用する「ビュー・ポート(窓)」です。
    JWindowは、ユーザーのデスクトップ上のどこにでも表示できるコンテナです。
    KeyStrokeは、キーボードまたは同等の入力デバイスのキー・アクションを表します。
    サイズ、位置、方向に基づいてComponentをソートするSortingFocusTraversalPolicyです。
    LayoutStyleは、コンポーネントの配置に関する情報を提供します。
    ComponentPlacementは、2つのコンポーネントを相互に関連付けて配置する場合に使用できる方法の列挙です。
    JList内のセルをペイントする「ゴム印」として使用できるコンポーネントを識別します。
    JListなどのコンポーネントがリスト内の各セルの値およびリストの長さを取得するために使用するメソッドを定義します。
    固定のインデックスを持つ値のリストを表示するコンポーネントの、現在の選択状態を表します。
    LookAndFeelは、その名前が示す通り、ルック・アンド・フィールをカプセル化します。
    メニューに配置できるコンポーネントはすべて、このインタフェースを実装する必要があります。
    MenuSelectionManagerは、メニュー階層での選択を所有します。
    ComboBoxModelの可変バージョンです。
    コンポーネントを互いの上に重なり合うように配置するレイアウト・マネージャです。
    ペイント委譲。
    Popupは、ユーザーにComponentを表示するために使用されます。通常、Componentは、特定の包含関係の階層に存在するほかのすべてのComponentの上に配置されます。
    PopupFactoryは、その名前が示す通り、Popupのインスタンスを取得するために使用します。
    処理の進捗を監視するクラスです。
    InputStreamからの読込みの進捗を監視します。
    値の描画(表示)を行うオブジェクトの必要条件を定義します。
    このクラスは再ペイント要求を管理し、コンポーネント・ツリーのメンバーに対する複数の要求を1回の再ペイントにまとめることなどにより、再ペイントの回数を最小限に抑えます。
    このインタフェースは、JRootPaneの子を1つ持つJDialog、JFrame、JWindow、JApplet、JInternalFrameなどのコンポーネントによって実装されます。
    RowFilterは、エントリをモデルからフィルタ・リングして、ビューに表示されないようにするために使用します。
    一部のデフォルトのRowFilterでサポートされる、値比較に使用可能な値の列挙です。
    EntryオブジェクトがRowFilterのインスタンスに渡されると、フィルタはエントリのデータ値を取得し、エントリを表示するかどうかを判断できます。
    RowSorterは、ソートとフィルタの基盤を提供します。
    SortKeyは、特定の列のソート順序を記述します。
    JScrollPaneなどのスクロール・コンテナに情報を提供するインタフェースです。
    JScrollPaneコンポーネントとともに使われる定数です。
    JScrollPaneが使用するレイアウト・マネージャです。
    ScrollPaneLayoutのUIリソース・バージョンです。
    インデックス付き選択範囲を1つだけサポートするモデルです。
    レイアウト・マネージャの便宜のために、コンポーネントのサイズと位置についての情報を計算します。
    SizeSequenceオブジェクトは、サイズおよび対応する位置の、順序付けされたリストを効率的に維持します。
    指定されたComparatorに基づいてフォーカス・トラバーサル・サイクルのComponentをソートすることによって、トラバーサル順序を決定するFocusTraversalPolicyです。
    SortOrderは、可能なソート順序の列挙です。
    DateのシーケンスのSpinnerModelです。
    配列またはListによって値を定義するSpinnerModelの単純な実装です。
    要素を無限に作成できるオブジェクト値シーケンスを表すモデルです。
    数値のシーケンスを表すSpinnerModelです。
    Springクラスのインスタンスは、その動作を特徴付ける3つのプロパティ(値はminimumpreferred、およびmaximum)を保持します。
    SpringLayoutは、関連付けられているコンテナの子を一連の制約に従ってレイアウトします。
    Constraintsオブジェクトは、SpringLayoutが制御するコンテナ内のコンポーネントのサイズ変更方法および位置変更方法を決定する制約を保持します。
    一般的には画面上でコンポーネントの配置および方向指定を行うために使用する定数のコレクションです。
    自動的に生成されたBeanInfoクラスのswing関連情報を指定するために使用される注釈。
    Swingのユーティリティ・メソッドのコレクションです。
    GUIとやりとりする時間のかかるタスクを、バックグラウンド・スレッドで実行するためのabstractクラスです。
    stateバウンド・プロパティの値です。
    指定された間隔で、1つ以上のActionEventをトリガーします。
    システム内のすべてのToolTipsを管理します。
    このクラスは、Swingコンポーネントに対するTransferableの転送処理に使用します。
    ドロップされたデータを挿入する位置を表します。
    このクラスには、クリップボードによる転送またはドラッグ・アンド・ドロップによる転送に関連する詳細情報をすべてカプセル化する機能と、ドラッグ・アンド・ドロップ操作をカスタマイズする機能があります。
    このインタフェースは、UIによって設定されたJComponentのクライアント・プロパティのタグ・キーにのみ使用され、L&Fの変更と直列化でクリアする必要があります。
    Swingコンポーネントのデフォルト値のテーブルです。
    このクラスを使うと、getXXX(key)メソッドで検索されるたびに構築されるデフォルトのテーブルにエントリを格納できます。
    LazyInputMapは、createValueメソッドでInputMapを作成します。
    このクラスを使うと、getXXX(key)メソッドではじめて検索されるまで構築されないデフォルトのテーブルにエントリを格納できます。
    このクラスは、生成されるインスタンスのClassのロードを遅延させるLazyValueの実装を提供します。
    UIManagerは、現在のルック・アンド・フィール、使用可能なルック・アンド・フィールのセット、ルック・アンド・フィールの変更時に通知を受けるPropertyChangeListeners、ルック・アンド・フィールのデフォルト値、およびさまざまなデフォルト値を取得するために使用する簡易メソッドを管理します。
    メニューの設定またはアプリケーションの初期設定のための、インストール済みLookAndFeelに関する概要を説明します。
    要求されたルック・アンド・フィールの管理クラスがユーザーのシステム上に存在しないことを示す例外です。
    JViewportのデフォルトのレイアウト・マネージャです。
    ウィンドウのクローズ操作を制御する定数です。