ちょっと真面目に



JavaでGUIを作成するとき

調べてみると色々あってどれがどれやら…

なんて状態になる

AWTを一番最初に学べばいい(学ぶべき)とは言うけれど

「じゃぁ、Swing,SWT,Fxは?」

ということになる

ここら辺もきちんと学んでいけば分かるのだろうが、正直面倒くささが先に立つ(IBMのdeveloperWorksなどを読み、分かった結果加え、下記の違いについて書き直しました)
今時のIDEならコードを書かず、ドラッグ&ドロップで簡単に作れてしまう訳だし)

前の記事の認証プログラムを制作するうえで

ちょっと頭を抱えたのがこの部分

認証を行うアルゴリズム自体はすぐに思いついたし

JkartaHttpClientのドキュメントを読めばすぐにできた

しかし、それにユーザインターフェースをくっつけようとしたとき

はたと手が止まってしまった

どれを使えばいいんだろう?と

各々に違いはたくさんあるし、欠点・利点も様々

何だかJavaのGUIはプログラミング言語やIDE、Linuxなどと同じ状況だなぁと感じてしまった

調べてみた限りでは

・AWT
AWTは、すべてのJavaのバージョンについており、どのようなJavaランタイムでも動くのが利点。GUIの見た目がプラットフォームに依存(ネイティブコードを叩いているため)。拡張性・実行速度ともにSWTに劣るため、どうしてもネイティブウィンドウシステムを利用したいなら、AWTではなくSWTを用いるのが普通。
というか、アプリに対して今時使う必要性が全くない(AWTを使うぐらいならSwing使え)

・Swing
Java2.0?から導入。AWTを継承。
AWTの欠点であった「GUIの見た目がプラットフォームに依存」を解消(つまり100%PureJavaであり、見た目が統一されている)。そして拡張性の無さも解消(SWTよりも拡張性は高い?)。しかしながら、リリース当時はOS比依存性を高めるためにパフォーマンスが犠牲にされていた。最近はJavaVMやSwingの高性能化、プラットフォーム環境の高性能化によりパフォーマンスネックが解消されつつある(現在は、単純なアプリならSWTと速度は変わらない。また今後もさらなる高速化が期待されている)。

・Fx
スクリプト言語。Swingアプリをより簡単・明快に制作することが出来る(要するにSwingを利用しつつ、Swing本来のコードを書くことなく、より簡単にGUIアプリを作成できる)。
しかし、Swingに比べ、現在は拡張性にまだ難あり。日本語のドキュメントもまだ少ない?

・SWT
SWTはEclipse独自のライブラリが必要。AWTと同じくGUIの見た目がプラットフォームに依存。しかし、AWTより拡張性が高く、高速であったため、通常はこちらの方を利用することが多かった?(しかし、AWTもSwingは、近年はコンピュータの高スペック化、JavaVM高速化に伴い、単純なアプリならほぼ変わらない速度となってるらしい。)

となり、結局、スクリプト言語で拡張性に不安なFxが候補から消え

最終的にSwingが残ってしまったわけだ

ぶっちゃけテキストウィンドウがあって、ボタンがあれば良かったので

正直どれを使っても問題はなかった気がするが…

この選択はプロ?の目から見て正しかったのだろうか…

調べてみた結果を、関係図にするとこんな感じか

java


SWTとAWTは別物であり、AWTの派生として(というかAWTを継承して)SwingやFxが存在している。通常、JavaでGUIアプリを作成したいのであればSwing、Fxを利用すべきであり、ネイティブウィンドウシステムをどうしても利用したい(見た目をそのプラットフォーム環境の見た目にしたい)のであればSWTを利用する(でも、ぶっちゃけそんなことするぐらいならVisualStudioなりDelphiなりGTKなりを使えって話になる)。

……こんな感じかな

結局、各々の利点・欠点を深く理解するには、面倒くさいのを抑えて、英語ドキュメントを読み、勉強するべきなのだろうね


追記
Swingの次期LookAndFeel(よーするにGUIの見た目の設定)であるNimbusを使えば結構色々な見た目に出来るみたい。
ただし開発中のものなので今後仕様変更がたくさんでそう。
http://java.sun.com/docs/books/tutorial/uiswing/lookandfeel/plaf.html