この項目 こうもく では、Javaのプラットフォームについて説明 せつめい しています。その他 た のスウィングについては「スウィング 」をご覧 らん ください。
Swingの部品 ぶひん を使用 しよう したウィンドウの例 れい
Swing は、プログラミング言語 げんご Java のGUIツールキット である。Oracle 社 しゃ のJava Foundation Classes の一部 いちぶ であり、同 おな じくJavaの GUI ツールキットである AWT を拡張 かくちょう したもの。Javaプログラムにグラフィカルユーザインタフェース (GUI)を提供 ていきょう するAPI である。
Swingは、先行 せんこう するAWTよりも洗練 せんれん されたGUIコンポーネント を提供 ていきょう するために開発 かいはつ された。Swingは、幾 いく つかのプラットフォームのルック・アンド・フィール をエミュレートしたネイティブなルック・アンド・フィールを提供 ていきょう する。また、「プラグイン 可能 かのう なルック・アンド・フィール」(Pluggable look and feel)をサポートしていることにより、アプリケーションは簡単 かんたん にルック・アンド・フィールを切 き り替 か えることができ、下 した で走 はし っているプラットフォームとは関係 かんけい ないルック・アンド・フィールを使 つか うこともできる。SwingはAWTよりも強力 きょうりょく で柔軟 じゅうなん なコンポーネントを持 も つ。ボタン、チェックボックス、ラベルといった馴染 なじ み深 ふか いコンポーネントの他 ほか にも、Swingはタブ付 つ きパネル、スクロール窓 まど 、スライダー、スピナ、ツリー表示 ひょうじ 、表 ひょう 、リストなどの高度 こうど なコンポーネントを提供 ていきょう している。
AWTと異 こと なり、Swingコンポーネントはプラットフォーム固有 こゆう のコードで実装 じっそう されたものではなく、完全 かんぜん にJavaで書 か かれている。このため、Swingはプラットフォームに依存 いぞん しない。このようなコンポーネント を軽量 けいりょう コンポーネントと呼 よ ぶ[ 1] 。AWT はオペレーティングシステム のウィンドウシステム に準 じゅん じたデザインになるのに対 たい し、Swing で作成 さくせい した GUI は Java プログラム上 じょう で描画 びょうが されるので、より柔軟 じゅうなん な設計 せっけい が可能 かのう となる。
SwingはJavaFX により置 お き換 か えられる方針 ほうしん であるが、当面 とうめん の将来 しょうらい はSwingもJava SE仕様 しよう の一部 いちぶ として残 のこ る見込 みこ みである[ 2] 。
Swingは、Java言語 げんご 用 よう の、プラットフォームに依存 いぞん しない、 "Model View Controller "型 がた の GUI フレームワークであり、単一 たんいつ スレッド プログラミング・モデルに従 したが っている[ 3] 。更 さら に、このフレームワークはコード構造 こうぞう とSwingベースのGUIのグラフィック表現 ひょうげん の間 あいだ に抽象 ちゅうしょう 化 か 層 そう を提供 ていきょう する。
Swingは完全 かんぜん にJavaで書 か かれているためプラットフォームに依存 いぞん しない。全 すべ てのSwingクラスに関 かん する完全 かんぜん なドキュメントがJava API Guide (バージョン6用 よう )またはJava Platform Standard Edition 8 API Specification (バージョン8用 よう )にある。
Swingは高度 こうど にモジュール・ベースのアーキテクチャである。これによりフレームワークのインターフェイスに様々 さまざま なカスタム実装 じっそう を「差 さ し込 こ む」ことができる。ユーザはJavaの継承 けいしょう の仕組 しく みを使 つか って、デフォルト実装 じっそう をオーバーライドして、これらのコンポーネントに独自 どくじ のカスタム実装 じっそう を作 つく ることができる[ 4] 。
Swingはコンポーネント・ベースのフレームワーク である。そのコンポーネント群 ぐん は全 すべ て究極 きゅうきょく 的 てき にはjavax.swing.JComponent クラスから派生 はせい したものである。Swingのオブジェクト群 ぐん は非同期 ひどうき 的 てき にイベントを発出 はっしゅつ し、それぞれがプロパティ群 ぐん を持 も ち、各 かく コンポーネントに固有 こゆう のメソッド呼 よ び出 だ しに対応 たいおう する。SwingコンポーネントはJavaBeans コンポーネントであり、Java Beans Component Architecture仕様 しよう に準拠 じゅんきょ している。
Swingはランタイム機構 きこう と間接 かんせつ 的 てき 構成 こうせい パターンに大 おお きく依存 いぞん しているため、その設定 せってい 値 ち が実行 じっこう 中 ちゅう に根本 こんぽん 的 てき に変 か わっても対応 たいおう できるようになっている。たとえば、Swingベースの、実行 じっこう 中 ちゅう のアプリケーションのユーザー・インターフェイスをホットスワップ 可能 かのう である。更 さら に、ユーザが独自 どくじ のルック・アンド・フィールの実装 じっそう を与 あた えることもでき、これにより、アプリケーションのコードは何 なに も変更 へんこう することなく、既存 きそん のSwingアプリケーションのルック・アンド・フィールを均質 きんしつ に変更 へんこう することが可能 かのう となっている。
軽量 けいりょう UI
Swingの高水準 こうすいじゅん の柔軟 じゅうなん 性 せい は、ネイティブ・ホストのオペレーティング・システム (OS)のGUI部品 ぶひん の表示 ひょうじ をオーバーライドできる能力 のうりょく を反映 はんえい したものである。Swingは、そのGUI部品 ぶひん をJava 2D API群 ぐん で描画 びょうが しており、ネイティブなユーザー・インターフェイス・ツールキットを呼 よ ばない。従 したが ってSwingコンポーネントには、それに対応 たいおう するネイティブなOSのGUIコンポーネントといったものはなく、下層 かそう にあるグラフィクスGUIで可能 かのう な範囲 はんい 内 ない においてどのように描画 びょうが しようと自由 じゆう である。
しかしながら、すべてのSwingコンポーネントは、その中核 ちゅうかく 部分 ぶぶん においてAWT コンテナに依存 いぞん している。これは、SwingのJComponent
はAWTのContainerを拡張 かくちょう したものだからである。これによりSwingをホストOSのGUI管理 かんり フレームワーク(デバイスとスクリーンの対応 たいおう づけや、キー操作 そうさ やマウス移動 いどう などユーザとのインタラクションを含 ふく む)に差 さ し込 こ むことが可能 かのう になっている。Swingは単純 たんじゅん に、Swing固有 こゆう の(OSにとらわれない)意味 いみ (semantics)を、下層 かそう にある(OS固有 こゆう の)コンポーネント群 ぐん に「置 お き換 か え」ているだけである。従 したが って、たとえば、全 すべ てのSwingコンポーネントは、(AWTの)Containerで定義 ていぎ されたcomponent.paint()の呼 よ び出 だ しに応 おう じて、自身 じしん をグラフィック・デバイスに描画 びょうが する。しかし、その描画 びょうが をOS固有 こゆう の「重 おも い」(heavy weight)ウィジェットに委任 いにん するAWTコンポーネントとは異 こと なり、Swingコンポーネントは自身 じしん の描画 びょうが は自分 じぶん の責任 せきにん として行 おこな う。
この「置 お き換 か え」(transposition)と「切 き り離 はな し」(decoupling)は単 たん に目 め に見 み える部分 ぶぶん だけのことではなく、そのコンポーネント包含 ほうがん 階層 かいそう 内 ない で発出 はっしゅつ されるイベントにおけるOS非 ひ 依存 いぞん の意味 いみ (semantics)の管理 かんり と応用 おうよう にもいえることである。一般 いっぱん 的 てき にいって、Swingアーキテクチャは、OSのGUIが持 も っている意味 いみ に対 たい して与 あた えられた様々 さまざま な表現 ひょうげん 形式 けいしき を、単純 たんじゅん ではあるが一般 いっぱん 化 か されたパターンに対応 たいおう づける仕事 しごと をAWTコンテナに委任 いにん している。その一般 いっぱん 化 か されたプラットフォーム上 じょう で構築 こうちく すれば、JComponent
モデルの形 かたち でリッチで複雑 ふくざつ なGUIの意味 いみ (semantics)を組 く み上 あ げたことになる。
import javax.swing.JFrame ;
import javax.swing.JLabel ;
import javax.swing.SwingUtilities ;
import javax.swing.WindowConstants ;
public class HelloWorld implements Runnable {
@Override
public void run () {
JFrame frame = new JFrame ();
frame . setDefaultCloseOperation ( WindowConstants . EXIT_ON_CLOSE );
frame . getContentPane (). add ( new JLabel ( "Hello, world!" ));
frame . pack ();
frame . setLocationRelativeTo ( null );
frame . setVisible ( true );
}
public static void main ( String [] args ) {
HelloWorld hello = new HelloWorld ();
SwingUtilities . invokeLater ( hello );
}
}
1998年 ねん にリリースされた J2SE 1.2 で初 はじ めてリリースされた。
2002年 ねん にリリースされた J2SE 1.4 で提供 ていきょう された Java Web Start を利用 りよう することでプログラムの再 さい 配布 はいふ の問題 もんだい を解決 かいけつ した。
2004年 ねん にリリースされた Java SE 1.5 でメモリ消費 しょうひ 効率 こうりつ の改善 かいぜん を行 おこな った。
2006年 ねん にリリースされた Java SE 6 では Java の実行 じっこう 性能 せいのう が改善 かいぜん されたことによって Swing の実行 じっこう 性能 せいのう も改善 かいぜん された。
^ Loy, Marc; Eckstein, Robert; Wood, Dave; Elliott, James; Cole, Brian (2012). Java Swing (2 ed.). O'Reilly Media, Inc. p. 53. ISBN 1449337309
^ “JavaFX FAQ ”. Oracle.com . 2016年 ねん 8月 がつ 1日 にち 閲覧 えつらん 。
^ "Swing threading and the event-dispatch thread - JavaWorld", Welcome to JavaWorld.com, http://www.javaworld.com/javaworld/jw-08-2007/jw-08-swingthreading.html
^ "LookAndFeel (Java Platform SE 7 )", Oracle Documentation, http://docs.oracle.com/javase/7/docs/api/javax/swing/LookAndFeel.html , 5/26/2012
ウィキブックスに
Java 関連 かんれん の
解説 かいせつ 書 しょ ・
教科書 きょうかしょ があります。
プラットフォーム オラクルのテクノロジー プラットフォーム技術 ぎじゅつ 主 おも なサードパーティ技術 ぎじゅつ 歴史 れきし 主要 しゅよう なJVM言語 げんご コミュニティ