
Java初心者ですが、質問させてください。
SWTとSwingという二つのGUIを作るための手法(?)があるのを学習しました。そこで「SWTがOSネイティブのAPIを呼び出す」「Eclipse自体がSWTで組まれてる」「Swingより高速」「でも、SwingもPC環境の向上などで早い」などとどこかに書いてあった気がするのですが、疑問があります。
・SwingでのGUIというのは、なんていうか、何年ぐらい前と具体的には言えないのですが、昔のJavaアプリっぽい、『浮いた感じ』のGUIになるのでしょうか。「Cabos」のGUIがちょうど、その「浮いた感じ」に相当するんですか?
・逆に、Eclipseで見られるように、Windows付属ソフトのようなメニューバーを持つ(マウスカーソルを合わせたときの色の変化や、選択したときのポップアップの仕方なども含め)ソフトで、Javaで作成されたものというのが、SWTで作られたソフトということでしょうか?
・Javaの特性と、SWTの特性を合わせて、「OSネイティブのAPIを呼び出すのにもかかわらず、同じ実行ファイルで、Windows・Mac両方ともで実行できるソフト」というのを作れるということでしょうか?
・Swing=「Cabosのような、あの浮いた感じ」ではあるのもの、高速化が十分なされているということですが、実際のところどうなのでしょうか。何か速度差の具体例があれば教えていただきたいのですが・・。何か「たとえ話」でもかまいません。
以上駄文で読みにくいかと思いますが、回答の程よろしくお願いします。

No.2ベストアンサー
- 回答日時:
正確には3つの選択肢と考えたほうがよいですね。
AWT、Swing、SWTでしょう。本当のことを言えば、「AWTとSwing」の2つで、後は「その他にも、SWTなんかがある」という感じなのですが・・・。まず、両者の最大の違いは、「標準か否か」という点でしょう。Swingは、Javaの標準ライブラリに含まれているものです。つまり、すべてのJavaプログラムで使えますし、作成したプログラムは(Java仮想マシンさえ入っていれば)どのOSでも動きます。
一方、SWTは、Eclipse Foundationという一団体が作って配布しているオープンソースのプログラムです。したがって、これを利用したプログラムは、それだけでは動きません(Javaの標準機能にないものなので)。あわせて、これを動かすためのDLLなどをつけて配らないと動かないのです。また、これはネイティブなコードですから、OSごとに異なるファイルを配布しないといけません。つまりSWTを利用した場合、「Windows用の配布ファイル」はMacやLinuxでは動かないことになります。
第2の違いは、「ネイティブコードによる実装か否か」という点でしょう。SWTの最大の長所は、ネイティブコードによって実行されるため高速でしかもOS固有のGUIが正確に再現できる、という点です。
Swingの場合、確かにSWTに比べるともったり感はあります。が、相当に複雑なインターフェイスならば別ですが、ちょっとしたアプリケーション程度なら、今のマシンではあまり気にならないと思いますよ。また、GUIに関しても、Java5、6とかなり修正されており、現在の最新のJavaならば、VistaでもVista風のGUIできちんと表示されます。確かに微妙に違っているところはありますが、いわれないと気づかない程度にはそっくりに作れます。昔はいざしらず、今ではちゃんと作れば「Swingかどうか」なんてほとんどわかりませんよ。
第3点の違い、それは「実装の貧弱さと拡張性」でしょう。SWTは、はっきりいって貧弱です。またネイティブコードを直接たたいているため、拡張性に乏しい欠点があります。それと、Javaにネイティブな実装を持ち込んでいる関係で、Javaの一般的なコーディングとはかなり違う、特殊なコーディングを強いられるところがあります。正直いって、かなりやりにくいです。
Swingは非常に柔軟です。また標準で用意されている機能も豊富で、やりようによってはどんなものでも作れるでしょう。ただし、その分、マスターするのは大変ですが。
いろいろと特徴はありますが、どちらにも共通していえることが1つあります。「どっちにしろ、AWTをマスターしてない人には使いこなせない」という点です(笑)。Java初心者ということですから、まずはAWTをマスターするのが先決でしょう。次に、Swingの基礎。これらがマスターできて、初めてSWTという選択肢が出てきます。これらもわからない人間に、SWTは使いこなせません。
というわけで、どちらがいいかではなく、「AWT→Swing」が基本。その上で、更にやってみたいなら「SWT」という選択肢もある、と考えたほうがよいと思いますよ。
No.3
- 回答日時:
AWTかSwingを使ったプログラムでは、
作成したクラスの入ったJARファイルがあれば、
WindowsでもMacでもUnixでも動きます。
これは、JARファイルには「Windows用」とか「Mac用」などの
区別がないからです。
しかし、SWTを使ったプログラムでは、作成したJARファイルのほかに
「swt-awt-win32-3064.dll」等のファイルが必要です。
これは名前にwin32が含まれているように、Windows用です。
Macで同じプログラムを動かすには、Mac用のDLLを用意しなければなりません。
ただ、SWTはWindows、Macをはじめとして主要なOSをほとんどサポートしていますし、JARファイルのほうはどのOSでも同じファイルで動きますので、あまりデメリットにはなりません。
私は自作のツール類(ファイル名を一括置換させたり、FTPを自動化するツールなど)をJava+SWTで作成しているのですが、そもそもWindowsでしか使わないので、SWTでまったく問題ありません。
また、Swingの「浮いた感じ」の見た目ですが、たしかJava1.4だか5.0で改善されているのではないでしたっけ?Swingはあまり使っていないので自信ないのですが・・・
No.1
- 回答日時:
> SwingでのGUIというのは、なんていうか、(以下略)
多分そのとおり。
Swingは環境間で概観を統一するために、Windows標準からみるとある意味浮いているとうか、
個人的な表現では「べたっとした感じ」になります。(特に昔のものは顕著)
> 逆に、Eclipseで見られるように、(以下略)
多分そのとおり。それがSWTの売りです。
> Javaの特性と、SWTの特性を合わせて、(以下略)
アプリ自体は特殊なこと/依存したことをしてなければ共通で動くはずですが、
OS毎に別のSWTを用意するなどが必要です。
> Swing=「Cabosのような、あの浮いた感じ」ではあるのもの、(以下略)
速度差もそうですが、Swingで一度描画の同期がずれると
画面全体がうまく再描画されなくなることがあって、見た目にかなり格好悪い印象。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Java javaでパソコンの内臓カメラや内臓マイクの映像や音をリアルタイムで映し出した 1 2022/07/09 14:02
- YouTube 新しく買ったデスクトップPCを使用すると、今までのGoogleのアカウントが使えなくなった。 1 2023/01/07 00:41
- インターネット広告・アフィリエイト アフェリエイトサイト 作成について 5 2022/05/13 21:31
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
VBAで他のプログラムが起動して...
-
タイムラインでの作成とActionS...
-
jarファイル実行時の環境変数の...
-
VC++から引数付きexeファイルの...
-
JavaScriptでPerlのサブルーチ...
-
C言語 ファイル処理
-
eclipseで作ったプログラムを他...
-
JavaScriptでコマンドプ...
-
「xdoc2txt」を利用した文書検...
-
コマンドプロンプトで外のexeや...
-
アイコンにD&Dしたファイル...
-
バッチファイルからエクエルの...
-
OLE又はDDEを使うVISUAL BESIC...
-
batからexeを実行し戻り値を受...
-
c/c++ ビルドしたにもかかわら...
-
LBAとファイルの関係
-
a.outはどこへ?
-
64bit環境で32bitのodbc参照
-
vbsで起動したexeを終了させる方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
JavaScriptでコマンドプ...
-
OLE又はDDEを使うVISUAL BESIC...
-
c/c++ ビルドしたにもかかわら...
-
VBAでEXEファイルを動かす方法...
-
コマンドプロンプトで外のexeや...
-
VC++から引数付きexeファイルの...
-
コンポーネント`MSCOMM32.cox'...
-
VBAで他のプログラムが起動して...
-
JARファイルをEclipseを使って...
-
ローカルのHTMLからexeファイル...
-
JAVA .jarファイルに再圧縮する...
-
以下のように複数のファイルを...
-
実行ファイルと実行モジュール...
-
64bit環境で32bitのodbc参照
-
LINK : fatal error LNK1104に...
-
VB6.0で作ったプロジェクトが起...
-
jarの開き方を教えてください。
-
ネットワーク越しのEXEファ...
-
eclipseで作ったプログラムを他...
おすすめ情報