第7回 EclipseによるSWTアプリケーションの作成
金子崇之(NTTデータ ビジネス開発事業本部)
岡本隆史(NTTデータ 技術開発本部)
2004/2/21
SWT(Standard Widget ToolKit)とは、Eclipseプロジェクトから提供されているGUI作成用ツールキットです。 頭文字「W」のウィジェット(Widget)という単語は、プログラマの間では広く使われている用語で、ボタンやメニュー、スクロールバーといった ユーザーインターフェイス(UI)のコンポーネント(構成要素)のことを指します。
本稿では、SWTの解説と、Eclipseを用いたSWTアプリケーションの作成方法について実践を踏まえて紹介します。
本文中では、Eclipseのバージョンを2.1.2、Eclipseインストールディレクトリをc:\eclipseとして記述しています。Eclipseのバージョンが上がると、プラグインのディレクトリ名などが変わることがありますので、ご注意ください。
| SWTの特徴 |
SWTはもともと、米IBMがIDE(統合開発環境)であるEclipse用に開発したツールキットです。Eclipseがオープンソースとして提供されたのに伴い、IDEとともにEclipseプロジェクトから提供されるようlになりました。
SWTの特徴は以下のとおりです。
| (1)軽快な動作 SWTはJNI(Java Native Interface)経由でOSのネイティブAPIを呼び出しているため、軽快に動作します。Eclipse自身もそのUIがSWTで作成されています。 Eclipseがここまで広く普及した理由には、SWTの軽快な動作によるところが大きいでしょう。 (2)プラットフォーム・ネイティブなルック&フィール UIの描画のためにOSのネイティブAPIを呼び出しているため、プラットフォーム・ネイティブなアプリケーションと同様のルック&フィールを実現することができます。 (3)Pure Javaではない JNIを使用しているため、Pure Javaではありません。そのため、プラットフォームごとにSWT用の共有ライブラリが必要となります。とはいうものの、現状Windows、Linux、Solaris、QNX、AIX、HP-UX、Mac OSX、Windows CEといった幅広いOSにSWTはポーティングされています。さらに、SWTのライセンスは再配布を可能にしていることを考慮すると、Pure Javaではないといっても大きな問題にはならないでしょう。さらに、プログラミング上の注意点としては、各ウィジェットが持つdisposeメソッドが挙げられます。SWTのウィジェットはPure Javaではないため、一般的なJavaオブジェクトのように、確保したリソースがGCによって開放されません。ウィジェットを破棄するときにはdisposeメソッドを明示的に呼び出す必要があります。 (4)アプリケーション・コードはプラットフォーム非依存 アプリケーションは、ShellやButtonなどのSWTのクラスを使用して開発されます。ShellやButtonは、ネイティブAPIを持つクラス「OS」や「Callback」「COM」を通じて共有ライブラリを呼び出し、OSに対し描画を依頼します。アプリケーションからのネイティブAPIの呼び出しは全てJava VM、SWTによって隠蔽されます。 そのため、SWTを使用して開発されたアプリケーションは、プラットフォーム非依存となります。 ソースファイルだけではなく、従来通りクラスファイルも移植性があります。また、基本的なウィジェットはプラットフォーム非依存ですが、SWTでは プラットフォーム固有の技術も利用することが可能です。 例えばWindowsでは、IEをActiveXのコンポーネントとして画面に貼り付ける、 というような処理もSWTにより行うことができます。
(5)Eclipseのプラグイン開発に必要 EclipseはSWTを用いて実装されているため、Eclipseを拡張するプラグインを開発するためにはSWTが必要です。 プラグイン開発では、JFaceというSWTを利用して実装された拡張ツールキットを使用することもできます。この場合でも、JFaceはSWTを完全には隠蔽しないため、SWTの知識が必要となります。 (6)Eclipseと同じ柔軟なライセンス SWTはEclipseと同じCPL(Common Public License)で配布されています。そのためSWTを使用したアプリケーションのソースコードを公開する義務は無く、ライセンス上の制限(商用利用不可など)もありません。 |
このように、Pure Javaではないという点や、現状ではRADツールが数少ないというマイナス面はあるものの、Javaでのクライアントアプリケーション作成においては、その動作速度が非常に魅力的です。
| Visual Editor Project発足 |
| 現在、SWTのRADツールとしていくつかの商用プラグインが存在していますが、Swing用のツールと比較すると数が少なく、また無料で使えるものは機能も十分とは言えない状況です。 しかし、Eclipseプロジェクトが2003年11月18日に発表したVisual Editor Projectの発足により、この状況は一変する可能性があります。 Visual Editor Projectとは、オープンソースのビジュアルGUI開発環境を作成および提供するプロジェクトです。このプロジェクトでは現在、Swingに対応したリファレンスGUI開発環境を提供しています。そしてSWTにも対応していく予定です。 このVisual Editorは、Eclipse本体と同様にIBMから提供されたソースコードをベースとして開発が始まっています。また、IBMだけではなく、Advanced Systems Concepts、Canoo、Instantiations、Red Hatなども、SWTサポートの実現のためにリソースを提供する予定です。 また始まったばかりのプロジェクトですが、このプロジェクトの成果により、GUIの開発においても、オープンソースのツールのみで商用IDEと同等の生産性を実現できるようになるでしょう。 このプロジェクトの詳細については、Eclipse Visual Editor Plojectのサイト(http://www.eclipse.org/vep/)をご覧ください。 |
| SWTの提供するコンポーネント |
GUIを持つアプリケーションを開発するには、使用するツールキットがどのようなコンポーネントを提供しているかを知っている必要があります。SWTで提供されているコンポーネント(ウィジェットやレイアウトなど)については、本記事の最後の「参考:コンポーネント」で紹介します。Java2標準のGUIコンポーネントであるSwingへの対応も比較として記述しておきますので、参考にしてください。
なお、各コンポーネントの詳細については、Eclipseのメニューから[ヘルプ]->[ヘルプ目次]で表示されるヘルプウィンドウで、 [Platform プラグイン・デベロッパー・ガイド]->[プログラマーズ・ガイド]->[Standard Widget Toolkit] 配下のヘルプを参照してください。
| SWTの使用方法 |
SWTを使用するにはライブラリを入手する必要がありまが、Eclipseを使用して開発を行う場合には、Eclipse本体に付属するライブラリを使用することができます。
SWTの利用には、以下の2つのライブラリが必要です。
| SWTのJavaライブラリ SWTのクラスが含まれているjarファイルが必要Windowsの場合、以下のjarライブラリが必要となる C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\ws\win32\swt.jar プラットフォームごとの共有ライブラリWindowsの場合は以下の共有ライブラリが必要となる C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\os\win32\x86\swt-win32-2135.dll |
アプリケーションの配布の際には、アプリケーションのクラスファイル(またはjarファイル)、SWTのJavaライブラリ、プラットフォームごとの共有ライブラリをセットにして配布します。
またEclipseを使用しない場合でも、EclipseのダウンロードページからSWT単体のライブラリを入手することができます。
Eclipseのダウンロードページ(http://download2.eclipse.org/downloads/index.php)から、「Latest
Release」の「2.1.2」をクリックし、「SWT Binary and Source」の中からプラットフォームに応じたファイルをダウンロードしてください。
![]() |
| SWT単体のライブラリをダウンロードできる「SWT Binary and Source」 |
| SWT用のプロジェクトの作成 |
SWTを用いた開発を行うにあたり、Eclipse上でSWT用のプロジェクトを作成します。 SWT用、といっても特に難しいことはありません。上記で述べた必要なライブラリの設定を行います。
■プロジェクトの作成と設定
[ファイル]->[新規]->[プロジェクト]で[新規プロジェクト]ダイアログを開き、[Java]->[Java プロジェクト] を選択します。
![]() |
[次へ]をクリックし、表示されるページでプロジェクト名を入力します。今回は「swtPrj」と入力しました。
![]() |
[次へ]をクリックし、表示されるページでビルド設定を定義します。 今回は以下のようにしました。
| ソース・フォルダ | swtPrj/src |
| デフォルト出力フォルダ | swtPrj/bin |
![]() |
[ライブラリー]タブをクリックし、SWTのJavaライブラリを指定します。[外部 JAR の追加]ボタンをクリックし、表示される[JAR 選択]ダイアログで[SWTの使用方法]のところで述べたSWTのJavaライブラリを選択します。
![]() |
[終了]ボタンをクリックし、プロジェクトを作成します。
プラットフォームごとに用意されている共有ライブラリは、SWTを使用したアプリケーションのコーディング時には必要とはなりませんが、起動時やデバッグ時には必要となります。「SWTの使用方法」のところで説明した共有ライブラリを、プロジェクトのディレクトリにコピーしてください。本稿では、C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\os\win32\x86\swt-win32-2135.dllを C:\eclipse\workspace\swtPrjにコピーしました。
もし共有ライブラリのコピーを行いたくない場合には、アプリケーションの起動時にJava VMの引数オプションとして「-Djava.library.path=C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\os\win32\x86 」を指定することでも実行できます。
■SWTのソースの設定
SWTのソースをSWTのJavaライブラリにひも付けしておくと、開発中にSWTのクラスのJavadocコメントがポップアップ表示されるので便利です。
パッケージ・エクスプローラー上の[swt.jar]を右クリック->[プロパティー]でダイアログを開いてください。[Java ソースの添付]->[外部ファイル]を選択し「c:\eclipse\plugins\org.eclipse.platform.win32.source_2.1.2\
src\org.eclipse.swt.win32_2.1.2\ws\win32\swtsrc.zip」を指定します。
![]() |
SWT単体でダウンロードした場合、ダウンロードしたアーカイブの中にswtsrc.zipが存在するので、それを指定すればよいでしょう。
| 1/4 |
|
INDEX |
||
| 第7回 EclipseによるSWTアプリケーションの作成 | ||
| Page1 SWTとは SWTの提供するコンポートネント SWTの使用方法 SWT用のプロジェクトの作成 |
||
| Page2 SWTアプリケーションの作成 シェル(ウィンドウ)の生成 シェルへのウィジェット(GUIコンポーネント)の配置 |
||
| Page3 ウィジェットへのイベントリスナーの登録(処理の追加) 別スレッドからの呼び出し スレッド化する UIスレッドへの委譲 チューニング |
||
| Page4 参考:コンポーネントリファレンス |
||
Eclipse徹底活用 バックナンバー
| 関連記事 INDEX | |
| 連載 Eclipseを使おう! | |
| 第1回 オープンソースのEclipseは仕事に使える開発環境 | |
| 第2回 Eclipseの統合開発環境を使いこなす | |
| 第3回 EclipseでTomcatを使ったJ2EE開発を行う | |
ホワイトペーパー(TechTargetジャパン)
- Android NDKでJNIを使用してアプリを高速化するには (2010/3/17)
C/C++やOpenGL ESといったネイティブコードを使うためのNDKとJNIを紹介し、その使い方や注意点を徹底解説します - 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |












