こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Swingは軽量コンポーネントについて

 今日は、JAVA Swing勉強中の初心者です。
 本を読むとAWTは重量コンポーネント、Swingは軽量コンポーネント(一部重量コンポーネントもある)と
書かれていますが、これは一体何を意味するものでしょうか。
 読んでても良く分からないのですが、重量コンポーネントはOSに近い所で動作する、軽量コンポーネントはその逆、、、
 この内容について、プログラムを組む人間は何に気をつけなければならないのでしょうか。
 どうも重量コンポーネントだから動作が重たいとか、遅いとか、メモリの消費が多いとかという解説も
見当たらないし、また、どちらが動作的に速いのか、遅いのか、OSへの負担が大きいのかも書いていません。
(読んでる本が悪すぎるのかも知れないですが。。。。)
 だから、AWTを使うときはどのように気をつけなければとか、Swingを書くときにどうしなければならないとかの記述
も、色々と調べてもどの本にも書いていませんが、だから一体何がどうなのでしょうか。
 
 そもそも、重量コンポーネント、軽量コンポーネントとは何を表すもので、だから何がどうなるのでしょうか。
 動作的なものについての記述なのでしょうか。

 宜しくお願いします。

投稿日時 - 2009-09-06 12:55:05

QNo.5267174

すぐに回答ほしいです

質問者が選んだベストアンサー

重量・軽量というのは「コスト」の話だろうと思う。コストというのは、メモリの消費とかCPUの使用量とかいろいろあるが、この場合は「ネイティブ環境のリソース」(ヒープメモリ)と考えるのがいい。

AWTは、実際の描画部分をOSのAPIに依存しているため、作成すると自動的にOSのリソースを消費する。つまり、AWTのGUIを使うほどに、OSのヒープを圧迫することになる。Swingの場合、土台となるウインドウ部分だけはOSのリソースを消費するが、その中のコンポーネントはすべてJava仮想マシン内のメモリしか使っていないわけで、OSへの影響はだいぶ小さい。

また、OSが管理する部分は、Java仮想マシンでは制御できない部分となる。つまりそれだけAWTは「Javaで制御できない部分」が大きいということになる。

だからどうしろ?ということより、「そういう性質のものであることを知って使う」という意味での、基礎知識と考えたほうがいいと思う。AWTは、Swingより高速だがOSへの依存度が高く、このため表示のカスタマイズもできない。それを知らず、AWTのコンポーネントクラスを継承して自分でコンポーネントを作ろうとして、「どうやっても表示がカスタマイズできない」と悩むのは時間の無駄だろう。どうあがいても「ネイティブコードで実行される描画」はJavaからタッチできないんだから。

「両者がどう違うか」を知っていればそんな無駄なことで悩まずにすむが、知らなければ一人でもがくことになってしまう。だから「知識として知っておくべき」と考えればいいと思う。

投稿日時 - 2009-09-06 18:32:45

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

> そもそも、重量コンポーネント、軽量コンポーネントとは何を表すもので、だから何がどうなるのでしょうか。
> 動作的なものについての記述なのでしょうか。

各GUIが軽快に動作するのかどうか、です。

Sun SJC-A認定ガイド
310-019対応
http://ec.nikkeibp.co.jp/item/books/P82820.html

上記の専門書のp.217辺りにある「6.4.2 AWTとSwing」にて、リッチクライアントなどの用語と共に記載されています。

投稿日時 - 2009-09-10 03:18:26

あなたにオススメの質問