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 port = HsqldbUIPlugin.getDefault().getPreferenceStore()
               .getString(IConstants.PORT);

初期値を設定する

さて、初期値(画面のsaとか9001とか)の設定は、別の拡張ポイント

org.eclipse.core.runtime.preferences

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

拡張ポイントは以下のように設定しました。

<extension point="org.eclipse.core.runtime.preferences">
  <initializer class="nu.mine.kino.plugin.hsqldb.ui.
                        HsqldbPreferenceInitializer"/>
</extension>

この拡張ポイントのJavaのクラスは

org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;

です。このクラスを拡張する、以下のようなクラスを作りました。

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

import org.apache.log4j.Logger;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jface.preference.IPreferenceStore;

public class HsqldbPreferenceInitializer extends AbstractPreferenceInitializer {
  public void initializeDefaultPreferences() {
    IPreferenceStore store = HsqldbUIPlugin.getDefault()
        .getPreferenceStore();
    store.setDefault(IConstants.USER_ID, "sa");
    store.setDefault(IConstants.PASSWORD, "");
    store.setDefault(IConstants.PORT, "9001");
  }
}

これで、プラグインが活性化されるときに上のメソッドが実行され、フィールドに初期値が設定されます。この初期値ははじめて設定ページを開いたときに表示されるのはもちろん「デフォルトの復元」などをクリックしたときもこの初期値に戻ります。

TIPS

OKボタンを押したときに、なんかやる

IPreferencePage?#performOk()をOverrideします。

public boolean performOk() {
   String port = HsqldbUIPlugin.getDefault().getPreferenceStore()
       .getString(IConstants.PORT);
   String userid = HsqldbUIPlugin.getDefault().getPreferenceStore()
       .getString(IConstants.USER_ID);
   String password = HsqldbUIPlugin.getDefault().getPreferenceStore()
       .getString(IConstants.PASSWORD);
   HsqldbUIPlugin.getDefault().stopHsqldb();
   return super.performOk();
}

StringFieldEditor? の他のエディタ

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

StringFieldEditor?などエディタクラスを自作する

関連リンク


この記事は

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

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

現在のアクセス:24156


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