По мотивам этой темы :
Может быть два класса предпочтений:
те, которые являются просто данными, которые редактор, просмотр или конструктор отправляет и получает, когда это необходимо .
В первом случае кажется, что лучший подход - использовать FieldEditorPreferencePage
для отображения, ввода, проверки и сохранения настроек.
Чтобы получить значения, подклассы могут предоставлять удобные методы, которые получают хранилище предпочтений и запрашивают его и возвращают значение с его идентификатором.
те, которые влияют на редактор или представление, которое уже работает .
Открытые редакторы и / или представления должны быть уведомлены о происходящих изменениях, чтобы они могли соответствующим образом обновить свои представления.
Это может быть сделано путем итерации по действующим редакторам и представлениям в методе FieldEditorPreferencPage.performOk()
, но, похоже, это приведет к нежелательному связыванию: страница предпочтений должна знать, как обновить соответствующие средства просмотра.
Другая возможность - использовать тот факт, что FieldEditorPreferencePage
является IPropertyChangeListener
, чтобы редакторы могли регистрировать интерес к изменениям свойств, которые влияют на их представления. Недостаток этого подхода состоит в том, что интерес должен быть удален, когда редактор или представление удалены, или исключения будут подняты, если
страница предпочтений изменяется после закрытия программы просмотра.
Ошибка 143727 ссылается на последние (то есть "Eclipse3.x") статьи о предпочтениях:
Интересно проверить прикрепленную страницу настроек «badwordchecker»:
/*
* @see IWorkbenchPreferencePage#init(IWorkbench)
*/
public void init(IWorkbench workbench) {
//Initialize the preference store we wish to use
setPreferenceStore(BadWordCheckerPlugin.getDefault().getPreferenceStore());
}
/**
* Performs special processing when this page's Restore Defaults button has been pressed.
* Sets the contents of the nameEntry field to
* be the default
*/
protected void performDefaults() {
badWordList.setItems(BadWordCheckerPlugin.getDefault().getDefaultBadWordsPreference());
}
/**
* Method declared on IPreferencePage. Save the
* author name to the preference store.
*/
public boolean performOk() {
BadWordCheckerPlugin.getDefault().setBadWordsPreference(badWordList.getItems());
return super.performOk();
}