Я хотел бы добавить слушателя, который будет срабатывать, когда любой Eclipse предпочтение изменено.Как добавить функцию IPreferenceChangeListener, которая отвечает на любое изменение предпочтений?
Я знаю, как это сделать для конкретной страницы предпочтений, используя активатор плагина пользовательского интерфейса, который объявляет страницу. Вы можете использовать следующий API вызывается из метода Activator.start():
getPreferenceStore().addPropertyChangeListener(IPropertyChangeListener listener)
Но я хотел бы, чтобы слушатель получать уведомления всякий раз, когда какой-либо предпочтение изменилось. Я попытался следующий, вызываемый из моего метода Activator.start():
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);
}
}
Я надеялся, что «/» из getNode может указывать корень предпочтения, но это не похоже на работу; println() не выполняется, когда я вношу изменения в настройки (например: Окно> Настройки> Общие> Всегда запускать в фоновом режиме).
Привет Greg-449, отлично спасибо за это. Я могу получить первый бит для работы - посетитель, но я не уверен, как заполнить addNodeChangeListener. В удаленном (событие NodeChangeEvent) или добавленном (NodeChangeEvent event) методе я могу сделать event.getChild(), но он дает мне org.osgi.service.prefs.Preferences. Что я могу сделать с этим? Я ожидал узел IEclipsePreferences, поэтому я могу выполнить другой accept (guest) и добавить моего слушателя к новому узлу. – betamax
IEclipsePreferences extends Preferences, я думаю, что вы должны просто использовать значение. –
Да, вы правы.Внутри добавленного (событие NodeChangeEvent) я был в состоянии сделать это: \t \t \t \t \t \t \t IEclipsePreferences узла = (IEclipsePreferences) event.getChild(); \t \t \t \t \t \t \t node.addPreferenceChangeListener (fPreferenceChangeListener); Однако я не смог удалить слушателя в remove(), потому что исключение выбрано потому, что узел удален. Я видел, что другой код упоминает об этом. – betamax