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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルスクリプトで「HTMLのテ...
-
ディレクトリを変更して外部コ...
-
状態の変化がAjaxで取得できない
-
JavascriptからJSPファイル(~....
-
ファイル名の先頭が数字だと駄...
-
Winでコマンドプロンプトを出さ...
-
[C#]データベース(mdf)のデータ...
-
OLE又はDDEを使うVISUAL BESIC...
-
java FTPサーバーへファイルの保存
-
VBAで他のプログラムを動かす
-
exeファイルをホームページ上で...
-
htaファイルが実行されません
-
VC++から引数付きexeファイルの...
-
.mfファイルのMain-Class : ク...
-
vbsで起動したexeを終了させる方法
-
VB6.0で作ったプロジェクトが起...
-
exewrapで変換したexeファイル...
-
VBフォームアプリケーションに...
-
windows.hがincludeされない
-
#include fileを絶対パスで指定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
OLE又はDDEを使うVISUAL BESIC...
-
JavaScriptでコマンドプ...
-
VBAで他のプログラムが起動して...
-
VBAでEXEファイルを動かす方法...
-
LINK : fatal error LNK1104に...
-
c/c++ ビルドしたにもかかわら...
-
jarの開き方を教えてください。
-
eclipseで作ったプログラムを他...
-
VBAでMP3を鳴らしたい
-
ローカルのHTMLからexeファイル...
-
コンパイル ./aと./a.out の違い
-
VC++から引数付きexeファイルの...
-
WScript.Echo と msgbox
-
コンポーネント`MSCOMM32.cox'...
-
実行ファイルと実行モジュール...
-
jarファイルとjava.exeの関連付...
-
JAVA .jarファイルに再圧縮する...
-
ネットワーク越しのEXEファ...
-
コマンドプロンプトで外のexeや...
おすすめ情報