#author("2021-12-14T01:57:39+00:00","","")
#author("2021-12-14T02:38:54+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。

Eclipseには便利なウィザード機能がありますが、あのウィザードも拡張ポイントで実装されています。これを試してみます。

ウィザードは、ウィザード全体を管理するIWizardインタフェースと、各ページを表すIWizardPageインタフェースで構成されます。

#ref(wiz_arch.jpg)


***構造 [#i1a32258]
ウィザード機能は以下のクラスで構成されています。
:IWizardインタフェース|一つのウィザードに対応するインタフェースです。拡張ポイントとして定義されます。通常はデフォルト実装のクラスWizardを使用します。Wizardクラスの主なメソッドは以下の通り:
-public void init(IWorkbench workbench, IStructuredSelection selection)
--ウィザードを起動したときに呼ばれる初期化メソッドです。ウィザードを起動したときに選択されているオブジェクト(アクティブなビューで選択されているオブジェクト)がselectionとしてわたってきます。

-public void addPages();
--ウィザードにページを追加するメソッドです。このメソッドをWizardクラスのサブクラスでOverrideします。通常、追加したいページを直接newして作成し、
 public void addPage(IWizardPage page)
メソッドを使って追加していきます。ちなみにウィザードの各ページクラス(IWizardPageの実装クラス)はWizardクラスのサブクラスのフィールドに保持しておくことが多いみたいです。


-public boolean canFinish()
--ウィザードの終了ボタンのenable/disableを制御するメソッドです。このメソッドがtrueを返すとき、ウィザードの終了ボタンが有効となります。このメソッドはページが送られたり、フォーカスが移動したときに発生する模様。Wizardクラスのデフォルトの実装は、全てのページのisPageCompleteがtrueかどうかをチェックしているみたいです。

-public boolean performFinish()
--終了ボタンを押したときに呼ばれるメソッドです。各ページで入力した情報を収集して、ウィザードのビジネスメソッドを実装します。


:IWizardPageインタフェース|ウィザードの1ページとなるインタフェースです。主なメソッドは以下の通り:



書き途中!!


***ウィザードで、あらかじめ選択されていた箇所を表示させたい [#q65190c5]
ウィザードクラス(WizardPageのサブクラス)のcreateControl内で以下のメソッドを呼んで初期化します。

 private void initialize() {
   // initで
   if (selection != null && selection.isEmpty() == false
       && selection instanceof IStructuredSelection) {
     IStructuredSelection ssel = (IStructuredSelection) selection;
     if (ssel.size() > 1)
       return;
     Object obj = ssel.getFirstElement();
     if (obj instanceof IResource) {
       IContainer container;
       if (obj instanceof IContainer)
         container = (IContainer) obj;
       else
         container = ((IResource) obj).getParent();
         containerText.setText(container.getFullPath().toString());
     }    ↑フォルダ名とかをあらかじめセットしたい場合。
   }
 }
こうすると例えばナビゲータでプロジェクトを選択していた場合、あらかじめそのディレクトリが表示され、親切ですね。




----
この記事は
#vote(おもしろかった[4],そうでもない[0])
#vote(おもしろかった[5],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS