Top / Eclipse / プラグイン開発のTIPS集 / org.eclipse.ui.IWorkbenchPreferencePage(設定ページ)

org.eclipse.ui.IWorkbenchPreferencePage? はウィンドウ >> 設定 にある設定ダイアログを表すインターフェースです。

preference.png

実際はorg.eclipse.jface.preference.FieldEditorPreferencePage? をextendsして使うのが多いようです。

拡張ポイント

org.eclipse.ui.preferencePages

plugin.xmlのサンプル

<extension point="org.eclipse.ui.preferencePages">
 <page
   class="nu.mine.kino.plugin.hsqldb.ui.HsqldbPreferencePage"
   id="nu.mine.kino.plugin.hsqldb.ui.HsqldbPreferencePage"
   name="Hsqldb設定"/>
</extension>

ソース

キー値の定数クラス

public interface IConstants {
    public static final String USER_ID = "user_id";
    public static final String PASSWORD = "password";
    public static final String PORT = "port";
}

画面クラス

package nu.mine.kino.plugin.hsqldb.ui;

import org.apache.log4j.Logger;

import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * @author Masatomi KINO
 * @version $Revision$
 */
public class HsqldbPreferencePage extends FieldEditorPreferencePage implements
    IWorkbenchPreferencePage {
  /**
   * Logger for this class
   */
  private static final Logger logger = Logger
      .getLogger(HsqldbPreferencePage.class);

  public HsqldbPreferencePage() {
    super(FieldEditorPreferencePage.GRID);
    setDescription("Hsqldbに接続するための設定を行います。設定を変更した場合、
                    起動しているサーバは停止されます。");
    setPreferenceStore(HsqldbUIPlugin.getDefault().getPreferenceStore());
    ↑ プラグインの IPreferenceStore フィールドと関連づけ
  }

  protected void createFieldEditors() {
    {
      addField(new StringFieldEditor(IConstants.USER_ID, "&UserID",
          getFieldEditorParent()));
     ↑キー値と画面のフィールドを関連づけ
    }
    {
      addField(new StringFieldEditor(IConstants.PASSWORD, "&Password",
          getFieldEditorParent()));
     ↑キー値と画面のフィールドを関連づけ
    }
    {
      addField(new StringFieldEditor(IConstants.PORT, "P&ort番号",
          getFieldEditorParent()));
     ↑キー値と画面のフィールドを関連づけ
    }
  }

  public void init(IWorkbench workbench) {
  }
}

ポイント

ポイント

使い方は

設定した値へのアクセス方法は、設定値を用いたい箇所でそれぞれ、

String target = SamplePlugin.getDefault().getPreferenceStore()
               .getString(ExplorerPreferencePage.P_TARGET);

とすればよいようです。ながい。。

このままだと一度設定を開かないとデフォルト値が反映されないので、どこかで値を設定するためにインスタンスを生成しないといけないのですが、フックできるメソッドはプラグインクラスにありました。AbstractUIPluginのサブクラスで、

protected void initializeDefaultPreferences(IPreferenceStore store) {
    ExplorerPreferencePage pref = new ExplorerPreferencePage();
    <-コンストラクタ内で初期値をセットするようコーディングした。
    store = pref.getPreferenceStore();
    super.initializeDefaultPreferences(store);
}

としておけばOKです。

Eclipse3.0では

このメソッド(initializeDefaultPreferences?)はEclipse3.0からdeprecatedになりました。初期値の設定はプラグインで行うのではなく、拡張ポイント

org.eclipse.core.runtime.preferences

を使用します。この拡張ポイントに登録したクラスはプラグインの起動時にロードされ、その中で初期値をセットすればよいわけです。

TIPS

addField に渡す引数 FieldEditor?のサブクラスには StringFieldEditor?の他にも以下のようなモノがあります。

String[][] labelAndValue = new String[][] {
  new String[] { "Select 1", "1" },
  new String[] { "Select 2", "2" },
  new String[] { "Select 3", "3" }, };
addField(new RadioGroupFieldEditor("radio1", "Radio Group",
  labelAndValue.length, labelAndValue, getFieldEditorParent()));
addField(new PathEditor("HOGE", "Path", "Chooser",
  getFieldEditorParent()));
addField(new FileFieldEditor("file1", "File", true,
  getFieldEditorParent()));
addField(new DirectoryFieldEditor("directory1", "Directory",
  getFieldEditorParent()));
addField(new FontFieldEditor("font1", "Font", "Preview",
  getFieldEditorParent()));
addField(new ColorFieldEditor("color1", "Color", getFieldEditorParent()));
01.png

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Eclipse / プラグイン開発のTIPS集 / org.eclipse.ui.IWorkbenchPreferencePage(設定ページ)

現在のアクセス:24156


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS