Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.IWorkbenchPreferencePage(設定ページ)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#topicpath
----
#contents
**設定ページ [#q24fd585]
org.eclipse.ui.IWorkbenchPreferencePage はウィンドウ >> ...
#ref(preference.png)
実際はorg.eclipse.jface.preference.FieldEditorPreferenceP...
***設定ページの拡張ポイント [#p618a200]
org.eclipse.ui.preferencePages
***plugin.xmlのサンプル [#n4e5a3ab]
<extension point="org.eclipse.ui.preferencePages">
<page
class="nu.mine.kino.plugin.hsqldb.ui.HsqldbPreference...
id="nu.mine.kino.plugin.hsqldb.ui.HsqldbPreferencePage"
name="Hsqldb設定"/>
</extension>
***ソース [#i47c9138]
キー値の定数クラス
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.FieldEditorPreferenc...
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 FieldEditorPre...
IWorkbenchPreferencePage {
/**
* Logger for this class
*/
private static final Logger logger = Logger
.getLogger(HsqldbPreferencePage.class);
public HsqldbPreferencePage() {
super(FieldEditorPreferencePage.GRID);
setDescription("Hsqldbに接続するための設定を行います...
起動しているサーバは停止されます。");
setPreferenceStore(HsqldbUIPlugin.getDefault().getPr...
↑ プラグインの IPreferenceStore フィールドと関連づけ
}
protected void createFieldEditors() {
{
addField(new StringFieldEditor(IConstants.USER_ID,...
getFieldEditorParent()));
↑キー値と画面のフィールドを関連づけ
}
{
addField(new StringFieldEditor(IConstants.PASSWORD...
getFieldEditorParent()));
↑キー値と画面のフィールドを関連づけ
}
{
addField(new StringFieldEditor(IConstants.PORT, "P...
getFieldEditorParent()));
↑キー値と画面のフィールドを関連づけ
}
}
public void init(IWorkbench workbench) {
}
}
***設定値にアクセスする [#kb155f3c]
上のようにクラスを定義しておくと、実際に設定ページで設定...
String port = HsqldbUIPlugin.getDefault().getPreferenceS...
.getString(IConstants.PORT);
***初期値を設定する [#f70f3dea]
さて、初期値(画面の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.AbstractPreferenceI...
です。このクラスを拡張する、以下のようなクラスを作りまし...
package nu.mine.kino.plugin.hsqldb.ui;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.preferences.AbstractPref...
import org.eclipse.jface.preference.IPreferenceStore;
public class HsqldbPreferenceInitializer extends Abstrac...
public void initializeDefaultPreferences() {
IPreferenceStore store = HsqldbUIPlugin.getDefault()
.getPreferenceStore();
store.setDefault(IConstants.USER_ID, "sa");
store.setDefault(IConstants.PASSWORD, "");
store.setDefault(IConstants.PORT, "9001");
}
}
これで、プラグインが活性化されるときに上のメソッドが実行...
**TIPS [#l7191b19]
***OKボタンを押したときに、なんかやる [#xb3a575c]
IPreferencePage#performOk()をOverrideします。
public boolean performOk() {
String port = HsqldbUIPlugin.getDefault().getPreferen...
.getString(IConstants.PORT);
String userid = HsqldbUIPlugin.getDefault().getPrefer...
.getString(IConstants.USER_ID);
String password = HsqldbUIPlugin.getDefault().getPref...
.getString(IConstants.PASSWORD);
HsqldbUIPlugin.getDefault().stopHsqldb();
return super.performOk();
}
***StringFieldEditor の他のエディタ [#d5eaed71]
addField に渡す引数 FieldEditorのサブクラスには StringFie...
String[][] labelAndValue = new String[][] {
new String[] { "Select 1", "1" },
new String[] { "Select 2", "2" },
new String[] { "Select 3", "3" }, };
addField(new RadioGroupFieldEditor("radio1", "Radio Grou...
labelAndValue.length, labelAndValue, getFieldEditorPar...
addField(new PathEditor("HOGE", "Path", "Chooser",
getFieldEditorParent()));
addField(new FileFieldEditor("file1", "File", true,
getFieldEditorParent()));
addField(new DirectoryFieldEditor("directory1", "Directo...
getFieldEditorParent()));
addField(new FontFieldEditor("font1", "Font", "Preview",
getFieldEditorParent()));
addField(new ColorFieldEditor("color1", "Color", getFiel...
#ref(01.png)
***StringFieldEditorなどエディタクラスを自作する [#x8107e...
例1
package nu.mine.kino.plugin.google.ui.preferences;
import nu.mine.kino.plugin.google.ui.Utility;
import org.eclipse.jface.preference.StringButtonFieldEdi...
import org.eclipse.swt.widgets.Composite;
public class GoogleKeyFieldEditor extends StringButtonFi...
public GoogleKeyFieldEditor(String name, String labe...
super(name, labelText, parent);
setChangeButtonText("Key 取得");
}
/*
* (非 Javadoc)
*
* @see org.eclipse.jface.preference.StringButtonFie...
*/
protected String changePressed() {
Utility.executeBrowser("http://www.google.com/ap...
// このリターンする値に、テキストボックスを変更...
// ただし、nullを返せば、何もしないらしい。
return null;
}
}
#ref(googleeditor.png)
例2~
たとえばURLの一覧を入力するフィールドエディタを作ってみま...
package nu.mine.kino.plugin.javadocsearch.pages;
import java.util.ArrayList;
import java.util.StringTokenizer;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.ListEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class URLEditor extends ListEditor {
/**
* @param name
* 設定を取得するためのキー
* @param labelText
* このフィールドのラベル
* @param parent
* 親のComposite
*/
public URLEditor(String name, String labelText, Compos...
super(name, labelText, parent);
}
/**
* ユーザ入力値を受け取るメソッドです。 ダイアログをユ...
* 入力された文字列を返します。 キャンセルしたときなど...
*
* @return 入力された文字列
* @see org.eclipse.jface.preference.ListEditor#getNew...
*/
protected String getNewInputObject() {
URLDialog dialog = new URLDialog(getShell());
int ret = dialog.open();
if (ret == IDialogConstants.OK_ID) {
String text = dialog.getText();
return text;
} else if (ret == IDialogConstants.CANCEL_ID) {
// [Cancel]ボタン押下
return null;
}
return null;
}
/**
* ページ内でリストを表示するときにStringからString[]...
*
* @param stringList
* Eclipseに保持されている文字列
* @see org.eclipse.jface.preference.ListEditor#parseS...
*/
protected String[] parseString(String stringList) {
StringTokenizer st = new StringTokenizer(stringList,
"\t" + "\n\r");
ArrayList v = new ArrayList();
while (st.hasMoreElements()) {
v.add(st.nextElement());
}
return (String[]) v.toArray(new String[v.size()]);
}
/**
* プリファレンスページで保存処理が行われたときに呼ば...
*
* @param items
* 表示されているリスト。
* @see org.eclipse.jface.preference.ListEditor#create...
*/
protected String createList(String[] items) {
StringBuffer path = new StringBuffer("");
for (int i = 0; i < items.length; i++) {
path.append(items[i]);
// path.append(File.pathSeparator);
path.append("\t");
}
return path.toString();
}
private class URLDialog extends Dialog {
/**
* ダイアログでユーザが入力している文字列(URL) <code...
*/
private String text;
public URLDialog(Shell parent) {
super(parent);
}
protected Point getInitialSize() {
return new Point(400, 150);
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("URLダイアログ");
}
/**
* URLを入力するダイアログを描画します。
*
* @see org.eclipse.jface.dialogs.Dialog#createDialo...
*/
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDial...
// Text textBox = new Text(composite, SWT.MUL...
// | SWT.BORDER | SWT.WRAP);
Label label = new Label(composite, SWT.NONE);
label.setText("URLを入力してください。");
Text textBox = new Text(composite, SWT.SINGLE | SW...
textBox.setLayoutData(new GridData(GridData.FILL_H...
textBox.setText("");
textBox.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
Text source = (Text) e.getSource();
text = source.getText();
}
});
return composite;
}
public String getText() {
return text;
}
}
}
#ref(urleditor.png)
***設定画面の変更をリスナに通知したい。 [#t03ebbaf]
設定画面で値を変更すると、イベントが発生します。そのイベ...
org.eclipse.jface.util.IPropertyChangeListener
です。イベントを発生させるクラス((つまり上のリスナをaddし...
org.eclipse.jface.preference.IPreferenceStore
です。従って、以下のようなコーディングで設定画面をListen...
HogePlugin.getDefault().getPreferenceStore().addProperty...
new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent even...
System.out.println(event.getSource());
System.out.println(event.getNewValue());
System.out.println(event.getOldValue());
}
});
HogePluginは設定画面を作成したときに、
setPreferenceStore(HogePlugin.getDefault().getPreference...
というように、その設定画面と関連づけられたプラグインクラ...
発生したイベントのクラスは
org.eclipse.jface.util.PropertyChangeEvent
というモノで、このイベントクラスからは
-event.getSource():イベントを発生させたモノ
-event.getNewValue():変更後の値
-event.getOldValue():変更前の値
-event.getProperty():変更したフィールドのキー値
などのようにデータを取り出すことができます。
ちなみにこのイベントは、フィールドごとに発生します。つま...
***設定画面左上のフィルタを使う [#n57165af]
設定画面の左上にテキストでフィルタする機能は、org.eclipse...
<extension point="org.eclipse.ui.keywords">
<keyword id="nu.mine.kino.plugin.google.ui.keywords.si...
</extension>
というようにフィルタ文字列を羅列した拡張ポイントを定義し...
<extension point="org.eclipse.ui.preferencePages">
<page class="nu.mine.kino.plugin.google.ui.preferences...
id="nu.mine.kino.plugin.google.ui.preferences.MainPr...
<keywordReference id="nu.mine.kino.plugin.google.ui....
</page> ↑keyword拡張ポイントのid
</extension>
として設定画面に関連づけします。この場合はフィルタ入力欄...
-[[Danny's Blog Attempt: Adding keywords to eclipse rcp p...
***関連リンク [#k5a0e849]
-[[Preference Dialogのサンプル:http://jssst03.c.u-tokyo.a...
-[[プラグインの設定を保存するには:http://www.atmarkit.co....
-[[PreferenceDialogを使ってツリー型の設定ダイアログを作る...
----
この記事は
#vote(おもしろかった[16],そうでもない[0])
-%%このままだと一度設定を開かないとデフォルト値が反映され...
-%%initializeDefaultPreferencesを呼ぶんですね -- [[きの]]...
-Eclipse2.1のときのはなしです。これ↑ -- [[きの]] &new{200...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
#topicpath
----
#contents
**設定ページ [#q24fd585]
org.eclipse.ui.IWorkbenchPreferencePage はウィンドウ >> ...
#ref(preference.png)
実際はorg.eclipse.jface.preference.FieldEditorPreferenceP...
***設定ページの拡張ポイント [#p618a200]
org.eclipse.ui.preferencePages
***plugin.xmlのサンプル [#n4e5a3ab]
<extension point="org.eclipse.ui.preferencePages">
<page
class="nu.mine.kino.plugin.hsqldb.ui.HsqldbPreference...
id="nu.mine.kino.plugin.hsqldb.ui.HsqldbPreferencePage"
name="Hsqldb設定"/>
</extension>
***ソース [#i47c9138]
キー値の定数クラス
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.FieldEditorPreferenc...
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 FieldEditorPre...
IWorkbenchPreferencePage {
/**
* Logger for this class
*/
private static final Logger logger = Logger
.getLogger(HsqldbPreferencePage.class);
public HsqldbPreferencePage() {
super(FieldEditorPreferencePage.GRID);
setDescription("Hsqldbに接続するための設定を行います...
起動しているサーバは停止されます。");
setPreferenceStore(HsqldbUIPlugin.getDefault().getPr...
↑ プラグインの IPreferenceStore フィールドと関連づけ
}
protected void createFieldEditors() {
{
addField(new StringFieldEditor(IConstants.USER_ID,...
getFieldEditorParent()));
↑キー値と画面のフィールドを関連づけ
}
{
addField(new StringFieldEditor(IConstants.PASSWORD...
getFieldEditorParent()));
↑キー値と画面のフィールドを関連づけ
}
{
addField(new StringFieldEditor(IConstants.PORT, "P...
getFieldEditorParent()));
↑キー値と画面のフィールドを関連づけ
}
}
public void init(IWorkbench workbench) {
}
}
***設定値にアクセスする [#kb155f3c]
上のようにクラスを定義しておくと、実際に設定ページで設定...
String port = HsqldbUIPlugin.getDefault().getPreferenceS...
.getString(IConstants.PORT);
***初期値を設定する [#f70f3dea]
さて、初期値(画面の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.AbstractPreferenceI...
です。このクラスを拡張する、以下のようなクラスを作りまし...
package nu.mine.kino.plugin.hsqldb.ui;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.preferences.AbstractPref...
import org.eclipse.jface.preference.IPreferenceStore;
public class HsqldbPreferenceInitializer extends Abstrac...
public void initializeDefaultPreferences() {
IPreferenceStore store = HsqldbUIPlugin.getDefault()
.getPreferenceStore();
store.setDefault(IConstants.USER_ID, "sa");
store.setDefault(IConstants.PASSWORD, "");
store.setDefault(IConstants.PORT, "9001");
}
}
これで、プラグインが活性化されるときに上のメソッドが実行...
**TIPS [#l7191b19]
***OKボタンを押したときに、なんかやる [#xb3a575c]
IPreferencePage#performOk()をOverrideします。
public boolean performOk() {
String port = HsqldbUIPlugin.getDefault().getPreferen...
.getString(IConstants.PORT);
String userid = HsqldbUIPlugin.getDefault().getPrefer...
.getString(IConstants.USER_ID);
String password = HsqldbUIPlugin.getDefault().getPref...
.getString(IConstants.PASSWORD);
HsqldbUIPlugin.getDefault().stopHsqldb();
return super.performOk();
}
***StringFieldEditor の他のエディタ [#d5eaed71]
addField に渡す引数 FieldEditorのサブクラスには StringFie...
String[][] labelAndValue = new String[][] {
new String[] { "Select 1", "1" },
new String[] { "Select 2", "2" },
new String[] { "Select 3", "3" }, };
addField(new RadioGroupFieldEditor("radio1", "Radio Grou...
labelAndValue.length, labelAndValue, getFieldEditorPar...
addField(new PathEditor("HOGE", "Path", "Chooser",
getFieldEditorParent()));
addField(new FileFieldEditor("file1", "File", true,
getFieldEditorParent()));
addField(new DirectoryFieldEditor("directory1", "Directo...
getFieldEditorParent()));
addField(new FontFieldEditor("font1", "Font", "Preview",
getFieldEditorParent()));
addField(new ColorFieldEditor("color1", "Color", getFiel...
#ref(01.png)
***StringFieldEditorなどエディタクラスを自作する [#x8107e...
例1
package nu.mine.kino.plugin.google.ui.preferences;
import nu.mine.kino.plugin.google.ui.Utility;
import org.eclipse.jface.preference.StringButtonFieldEdi...
import org.eclipse.swt.widgets.Composite;
public class GoogleKeyFieldEditor extends StringButtonFi...
public GoogleKeyFieldEditor(String name, String labe...
super(name, labelText, parent);
setChangeButtonText("Key 取得");
}
/*
* (非 Javadoc)
*
* @see org.eclipse.jface.preference.StringButtonFie...
*/
protected String changePressed() {
Utility.executeBrowser("http://www.google.com/ap...
// このリターンする値に、テキストボックスを変更...
// ただし、nullを返せば、何もしないらしい。
return null;
}
}
#ref(googleeditor.png)
例2~
たとえばURLの一覧を入力するフィールドエディタを作ってみま...
package nu.mine.kino.plugin.javadocsearch.pages;
import java.util.ArrayList;
import java.util.StringTokenizer;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.ListEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class URLEditor extends ListEditor {
/**
* @param name
* 設定を取得するためのキー
* @param labelText
* このフィールドのラベル
* @param parent
* 親のComposite
*/
public URLEditor(String name, String labelText, Compos...
super(name, labelText, parent);
}
/**
* ユーザ入力値を受け取るメソッドです。 ダイアログをユ...
* 入力された文字列を返します。 キャンセルしたときなど...
*
* @return 入力された文字列
* @see org.eclipse.jface.preference.ListEditor#getNew...
*/
protected String getNewInputObject() {
URLDialog dialog = new URLDialog(getShell());
int ret = dialog.open();
if (ret == IDialogConstants.OK_ID) {
String text = dialog.getText();
return text;
} else if (ret == IDialogConstants.CANCEL_ID) {
// [Cancel]ボタン押下
return null;
}
return null;
}
/**
* ページ内でリストを表示するときにStringからString[]...
*
* @param stringList
* Eclipseに保持されている文字列
* @see org.eclipse.jface.preference.ListEditor#parseS...
*/
protected String[] parseString(String stringList) {
StringTokenizer st = new StringTokenizer(stringList,
"\t" + "\n\r");
ArrayList v = new ArrayList();
while (st.hasMoreElements()) {
v.add(st.nextElement());
}
return (String[]) v.toArray(new String[v.size()]);
}
/**
* プリファレンスページで保存処理が行われたときに呼ば...
*
* @param items
* 表示されているリスト。
* @see org.eclipse.jface.preference.ListEditor#create...
*/
protected String createList(String[] items) {
StringBuffer path = new StringBuffer("");
for (int i = 0; i < items.length; i++) {
path.append(items[i]);
// path.append(File.pathSeparator);
path.append("\t");
}
return path.toString();
}
private class URLDialog extends Dialog {
/**
* ダイアログでユーザが入力している文字列(URL) <code...
*/
private String text;
public URLDialog(Shell parent) {
super(parent);
}
protected Point getInitialSize() {
return new Point(400, 150);
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("URLダイアログ");
}
/**
* URLを入力するダイアログを描画します。
*
* @see org.eclipse.jface.dialogs.Dialog#createDialo...
*/
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDial...
// Text textBox = new Text(composite, SWT.MUL...
// | SWT.BORDER | SWT.WRAP);
Label label = new Label(composite, SWT.NONE);
label.setText("URLを入力してください。");
Text textBox = new Text(composite, SWT.SINGLE | SW...
textBox.setLayoutData(new GridData(GridData.FILL_H...
textBox.setText("");
textBox.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
Text source = (Text) e.getSource();
text = source.getText();
}
});
return composite;
}
public String getText() {
return text;
}
}
}
#ref(urleditor.png)
***設定画面の変更をリスナに通知したい。 [#t03ebbaf]
設定画面で値を変更すると、イベントが発生します。そのイベ...
org.eclipse.jface.util.IPropertyChangeListener
です。イベントを発生させるクラス((つまり上のリスナをaddし...
org.eclipse.jface.preference.IPreferenceStore
です。従って、以下のようなコーディングで設定画面をListen...
HogePlugin.getDefault().getPreferenceStore().addProperty...
new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent even...
System.out.println(event.getSource());
System.out.println(event.getNewValue());
System.out.println(event.getOldValue());
}
});
HogePluginは設定画面を作成したときに、
setPreferenceStore(HogePlugin.getDefault().getPreference...
というように、その設定画面と関連づけられたプラグインクラ...
発生したイベントのクラスは
org.eclipse.jface.util.PropertyChangeEvent
というモノで、このイベントクラスからは
-event.getSource():イベントを発生させたモノ
-event.getNewValue():変更後の値
-event.getOldValue():変更前の値
-event.getProperty():変更したフィールドのキー値
などのようにデータを取り出すことができます。
ちなみにこのイベントは、フィールドごとに発生します。つま...
***設定画面左上のフィルタを使う [#n57165af]
設定画面の左上にテキストでフィルタする機能は、org.eclipse...
<extension point="org.eclipse.ui.keywords">
<keyword id="nu.mine.kino.plugin.google.ui.keywords.si...
</extension>
というようにフィルタ文字列を羅列した拡張ポイントを定義し...
<extension point="org.eclipse.ui.preferencePages">
<page class="nu.mine.kino.plugin.google.ui.preferences...
id="nu.mine.kino.plugin.google.ui.preferences.MainPr...
<keywordReference id="nu.mine.kino.plugin.google.ui....
</page> ↑keyword拡張ポイントのid
</extension>
として設定画面に関連づけします。この場合はフィルタ入力欄...
-[[Danny's Blog Attempt: Adding keywords to eclipse rcp p...
***関連リンク [#k5a0e849]
-[[Preference Dialogのサンプル:http://jssst03.c.u-tokyo.a...
-[[プラグインの設定を保存するには:http://www.atmarkit.co....
-[[PreferenceDialogを使ってツリー型の設定ダイアログを作る...
----
この記事は
#vote(おもしろかった[16],そうでもない[0])
-%%このままだと一度設定を開かないとデフォルト値が反映され...
-%%initializeDefaultPreferencesを呼ぶんですね -- [[きの]]...
-Eclipse2.1のときのはなしです。これ↑ -- [[きの]] &new{200...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: