
第5回 EclipseのJVEで扱えるSWT部品を作る
米持幸寿
2006/4/6
米持先進技術工房 @IT分室では、テクノロジー・エバンジェリスト 米持幸寿氏が、J2EEの最新技術情報を提供します。最新技術の中身をいち早くキャッチアップしたい読者のためのコーナーです。
EclipseのJava Visualエディタで画面を配置し、ロジックを追加する簡単な方法が前回までにお分かりいただけたと思います。今回は、自分で特殊なSWT部品(カスタムウィジェット)を作り、それをJVE上で配置する方法をご紹介します。カスタムウィジェットを作って使い回すことで開発生産性が大幅に向上します。これこそオブジェクト指向的なソフトウェア開発です。
カスタムウィジェットはどうやって作るか |
EclipseのSWTでは、カスタムウィジェットを org.eclipse.swt.widgets.Compositeクラスのサブクラスとして作ります。Compositeクラスは、そもそもSWT中ではコンテナクラスに当たります。コンテナとは、オブジェクトの入れ物です。複合部品として作られている部品も、そのままコンテナで作ることができますので、それなりに意味のある構造です。
つまり、SWTの部品配置は、コンテナにコンテナが配置され、その「内側にあるコンテナ」にさらにコンテナを配置する、という関係で部品を作っていくことになります。旧来のC++ライブラリ(Microsoft Foundation ClassライブラリやIBM Open Classライブラリ)、あるいはAWTやSwingのように、Canvasクラスのような「のっぺらぼう」部品を継承して部品を作ったり、TextやButtonなどの既存部品を継承して改造する形で部品を作ることに慣れている読者には戸惑いや不満もあるでしょうけれど、これはEclipseのルールとしてあまり深く考えずに従いましょう。
![]() |
| コンテナの関係 |
単品で使いやすい部品を考えましょう。例えば、半角数字以外の文字が入力されていると赤くなる入力フィールドを作ってみましょう。大まかには、以下の手順で開発します。
- Compositeを継承したVisual Classを作ります(JVEで表示されます)
- FillLayoutをセットします。サイズを適当な大きさにします
- Text部品を置きます
- Text部品のメソッドを委譲します(同じメソッドを外に見せてあげる、ということ)
- フィールドに対するイベント処理を記述します
SWT部品の作成 |
いつのときも、デザインの最初の作業は名前を付けることです。今回は、文字か数字かの「型」に反応するTextフィールドという意味合いから、「TypeSensitiveText」としたいと思います。
先ほど説明したとおり、部品はCompositeを継承して作ります。Textフィールドを持つ部品にしますので、CompositeにTextを張り付けます。ボタンなどを一緒に配置するのか、そうでないかでレイアウトが変わります。今回は、Textだけが張り付いている部品としたいので、FillLayoutを使いましょう。そうすると、この部品全体にTextフィールドが表示されるようになり、普通のTextのように扱えます。
![]() |
| コンポーネントの関係 |
さて、この関係はJVEで作れることにお気付きでしょうか? そう、JVEの部品そのものをJVEで作っていくことになります。では、部品のクラスを作りましょう。
■Visual Classの作成
Javaパースペクティブで、ビルドパスにSWTのライブラリが追加されたJavaプロジェクトが準備されている状態で、作業します(前回までのプロジェクトでOKです) 。
- [ファイル]→[新規]→[Visual Class]を選択します。SWT-Compositeを継承するクラス[TypeSensitiveComposite]クラスを作ってください。当然のことながら、JVEで表示されます
- このクラスそのもの(JVE上の灰色の四角)をクリックして選択し、両端に表示される小さな四角をドラッグして大きさを小さくします(テキストフィールドくらいの大きさに)
■FillLayoutの設定
ワークベンチの下の方に表示されている[プロパティ]ビューで、[layout]の値部分をクリックして選択し、もう1回クリックしてドロップダウンを表示し、FillLayoutを選択します。選択しただけだとまだ編集中の状態なので、[Enter]キーを押すか、別のどこかをクリックしてフォーカスを移動すると編集が終わります。
![]() |
| FillLayoutの設定 |
■Text部品の配置
JVEのパレットから、Textをドラッグし、部品の上にドラッグします。フィールド名はデフォルトの「text」のままでいいでしょう。
![]() |
| Text部品を配置したところ |
■メソッドの委譲
この作業は、CompositeクラスにはないけれどTextクラスにあるメソッドを外に見せてあげる作業です。例えば、Textフィールドには、「setText」メソッドがないと、外からテキストをセットできません。CompositeにはsetTextというメソッドがないので、これを外に見せてあげる必要があるわけです。
EclipseのJDT(Java開発ツール)には、委譲メソッドを生成する機能がありますので、これを使います。
ソースコード上で、textフィールドが宣言されている部分を探し、そのフィールド定義の上にカーソルを置いて右クリックして[ソース]→[委譲メソッドの生成]を選択してください。[委譲メソッドの生成]ダイアログが開いたら、[選択をすべて解除]ボタンをクリックして選択を解除した後、getText()と setText(String) のみチェックして[OK]ボタンをクリックします(実際には、委譲するメソッドもきちんと計画して選択します)。
![]() |
| 委譲メソッドの生成 |
これで取りあえずテキストにはアクセスできるようになります。
■プロパティの用意
この部品は、Textフィールドですが、文字タイプを示すプロパティを持ち、文字が数字でなければいけないか、普通の文字でよいかをセットできるようにします。部品を赤くするための色を示すオブジェクトも作っておきます。クラスの一番上に、以下のコードを追加してください。
リスト1 定数とクラス変数 public static final int TYPE_NONE = 0; |
type変数の上で右クリックし、[ソース]→[GetterおよびSetterの生成]を選択し、type以下が選択されていることを確認して、[OK]ボタンをクリックします。
![]() |
| アクセサの生成 |
■イベントコードの追加
テキストが編集されたら、それを通知してもらうイベント処理コードを作ります。ビジュアル・エディタ上で、Textオブジェクトを右クリックしてメニューから[Events]→[modifyText]をクリックします。
![]() |
| イベントコードの生成 |
このイベントは、Textフィールドが編集されたら通知されるイベントです。以下のコードを書き込みます。
リスト2 modifyTextのイベント処理コード
switch(type) { |
これで、タイプが[TYPE_NUMBER]とセットされているときに、数字以外の文字が書き込まれるとフィールドが赤くなります。[Ctrl]+[S]を押して保存します。
別の部品に張り付けてテスト |
では、別の部品に張り付けて挙動をテストしましょう。先ほどと同じ要領で、Visual Class[TypeSensitiveTextTester]をCompositeクラスを継承して作成してください。レイアウトはセットしなくても結構です。
自作した部品を配置するには、パレットの[Choose Bean](Beanの選択)をクリックし、ダイアログで、目的のBean名を入力します。途中まで入力すると一覧に該当するものが表示されますので、それを選択します。
![]() |
| カスタム部品の張り付け |
マウスカーソルが追加マークになるので、パレットの上に、適当に配置します。パレット上をこするようにドラッグすることで自由な場所の自由な大きさに配置できます。適当に3つくらい置いてください。
張り付けた部品が選択された状態でプロパティービューを見ると、typeというのがあります。これを「1」にセットすると、TYPE_NUNBERなので、これをセットします。すると、そのフィールドは、半角数字以外の文字を入力すると赤くなります。
[Ctrl]+[S]を押して保存後、メニューから[実行]→[次を実行]→[Java Bean]を選択して、実行してみましょう。適当に文字や数字をフィールドに入力してみてください。
![]() |
| 実行結果 |
さて、いかがでしょうか。こうして、一度作った部品は、「後でこう使えるようにしよう」と計画しておくことで、どんどんほかの部品に張り付けて使うことができます。そして、多くの部品をJVE上で作っていくことができるわけです。
次回は、レイアウトをJVE上で活用する方法を解説します。
| 筆者プロフィール |
米持幸寿(よねもち ゆきひさ)![]() 1987年に日本アイ・ビー・エム入社。メインフレームOS、ミドルウェアの障害対応、障害解析ソフトウェアの開発、ワークフローシステム開発、オブジェクト指向開発、Web開発などを経験。2000年より、ソフトウェアのテクノロジー・エバンジェリストとして活動中。 米持先進技術工房 テクノロジー・エバンジェリストとして活躍する米持氏が主催する、J2EEの最新技術情報を提供するWebサイト。 http://www-6.ibm.com/jp/developerworks/tips/ytech/ |
米持先進技術工房−@IT分室 バックナンバー
| Java Solution全記事一覧 |
ホワイトペーパー(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! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | 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台以上! グループ内 サーバの「統合管理」によるメリットは? |
















