私が聞くリスナーを追加したいとき Eclipseの設定が変更されました。どのように設定変更に応答するIPreferenceChangeListenerを追加できますか?
ページを宣言するUIプラグインのアクティベータを使用して、特定の設定ページでこれを行う方法を知っています。あなたはActivator.start()メソッドから呼び出され、次のAPI使用する可能性があります:
getPreferenceStore().addPropertyChangeListener(IPropertyChangeListener listener)
をしかし、私はすべての設定が変更されるたびに、リスナーが通知されるようにしたいと思います。私は「/」getNodeのが好みのルートを示している可能性がありますが、これは動作していないよう期待し
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
public class Activator extends AbstractUIPlugin {
...
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
addMyPreferenceChangeListener();
}
private IPreferenceChangeListener fPreferenceChangeListener;
private void addMyPreferenceChangeListener() {
fPreferenceChangeListener = new IPreferenceChangeListener() {
public void preferenceChange(PreferenceChangeEvent event) {
System.err.println("PreferenceChangeEvent");
}
};
IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode("/");
prefs.addPreferenceChangeListener(fPreferenceChangeListener);
}
}
;:私は私のActivator.start()メソッドから呼び出され、次のことを試してみました環境設定を変更するとprintln()は実行されません(例:ウィンドウ>設定>一般>常にバックグラウンドで実行)。すべてのノードに対して通知された単一のリスナーを持ってする方法はありません
こんにちはグレッグ-449、そのための優れた感謝。最初のビット(ビジター)を得ることができますが、addNodeChangeListenerをどのように完了するかはわかりません。削除(NodeChangeEventイベント)または追加(NodeChangeEventイベント)メソッドではevent.getChild()を実行できますが、org.osgi.service.prefs.Preferencesが表示されます。私はそれで何ができますか?私は別の受け入れ(ビジター)を実行し、新しいノードにリスナーを追加できるように、IEclipsePreferencesノードを期待していました。 – betamax
IEclipsePreferencesはプリファレンスを拡張しています。私はあなたが価値にキャストできるはずだと思います。 –
はい、そうです。内部(NodeChangeEventイベント)を追加しました。これを行うことができました:\t \t \t \t \t \t \t IEclipsePreferences node =(IEclipsePreferences)event.getChild(); \t \t \t \t \t \t \t node.addPreferenceChangeListener(fPreferenceChangeListener);しかし、ノードが削除されたため例外がスローされるため、removed()のリスナーを削除できませんでした。私はこれに言及した他のコードを見てきました。 – betamax