(Translated by https://www.hiragana.jp/)
Swing - Wikipedia コンテンツにスキップ

Swing

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Swingの部品ぶひん使用しようしたウィンドウのれい

Swingは、プログラミング言語げんご JavaGUIツールキットである。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作成さくせいした GUIJavaプログラムじょう描画びょうがされるので、より柔軟じゅうなん設計せっけい可能かのうとなる。

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実行じっこう性能せいのう改善かいぜんされた。

関連かんれん項目こうもく

[編集へんしゅう]

脚注きゃくちゅう

[編集へんしゅう]
  1. ^ Loy, Marc; Eckstein, Robert; Wood, Dave; Elliott, James; Cole, Brian (2012). Java Swing (2 ed.). O'Reilly Media, Inc. p. 53. ISBN 1449337309 
  2. ^ JavaFX FAQ”. Oracle.com. 2016ねん8がつ1にち閲覧えつらん
  3. ^ "Swing threading and the event-dispatch thread - JavaWorld", Welcome to JavaWorld.com, http://www.javaworld.com/javaworld/jw-08-2007/jw-08-swingthreading.html
  4. ^ "LookAndFeel (Java Platform SE 7 )", Oracle Documentation, http://docs.oracle.com/javase/7/docs/api/javax/swing/LookAndFeel.html , 5/26/2012

外部がいぶリンク

[編集へんしゅう]