Модуль JFace предоставляет среду для реализации мастеров, страниц параметров, а также окон диалога. Реализация этих объектов соответствует общему шаблону. Содержимое страницы или окна диалога определяется путем реализации метода createContents, который создает управляющие элементы SWT, отображающие информационное наполнение страницы. Кроме того, этот метод позволяет добавить обработчики нужных событий. Страница отвечает за создание и возвращение составного объекта, который будет родительским объектом для всех управляющих элементов на странице. Ниже приведен фрагмент кода:
protected Control createContents(Composite parent) { ... //composite_textField << parent Composite composite_textField = createComposite(parent, 2); Label label_textField = createLabel(composite_textField, MessageUtil.getString("Text_Field")); textField = createTextField(composite_textField); pushButton_textField = createPushButton(composite_textField, MessageUtil.getString("Change")); //composite_tab << parent Composite composite_tab = createComposite(parent, 2); Label label1 = createLabel(composite_tab, MessageUtil.getString("Radio_Button_Options")); // tabForward(composite_tab); //radio button composite << tab composite Composite composite_radioButton = createComposite(composite_tab, 1); radioButton1 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_1")); radioButton2 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_2")); radioButton3 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_3")); //composite_tab2 << parent Composite composite_tab2 = createComposite(parent, 2); Label label2 = createLabel(composite_tab2, MessageUtil.getString("Check_Box_Options")); //$NON-NLS-1$ // tabForward(composite_tab2); //composite_checkBox << composite_tab2 Composite composite_checkBox = createComposite(composite_tab2, 1); checkBox1 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_1")); checkBox2 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_2")); checkBox3 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_3")); initializeValues(); return new Composite(parent, SWT.NULL); }
Большая часть кода в этом методе связана с созданием и расположением управляющих элементов, поэтому эту часть кода можно оставить без анализа. Ниже показан пример соответствующей страницы:
Кроме того, страница параметров должна обрабатывать сообщение performOk. Обычно данный метод обновляет и сохраняет пользовательские параметры и при необходимости обновляет другие объекты модуля, связанные с измененными параметрами. Метод performDefaults позволяет восстановить первоначальные значения параметров после нажатия на кнопку Восстановить значения по умолчанию.
Если во время нажатия на кнопку Применить выполняется дополнительная обработка, метод performApply может быть переопределен. По умолчанию вызывается метод performOk.
Страницы параметров должны переопределить метод doGetPreferenceStore(), чтобы восстановить сохранение значений в хранилище.
Хранилище параметров представляет собой удобный и эффективных механизм для хранения значений параметров в классе модуля и обращения к ним. Они обеспечивают доступ на уровне модуля к параметрам, которые на самом деле сохраняются с помощью динамической службы параметров. AbstractUIPlugin задает хранилище параметров уровня модуля, существующее в течение всего жизненного цикла модуля. Модуль может добавлять записи в хранилище параметров и обновлять значения в случае изменения параметров на странице. Поскольку хранилища параметров используют службу параметров самой платформы, это позволяет обеспечить надежное хранение значений и инициализацию хранилища с помощью соответствующих механизмов.
Следующий исходный код в классе ReadmePreferencePage получает хранилище параметров для ReadmePlugin.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Поскольку ReadmePlugin является расширением класса AbstractUIPlugin, он автоматически наследует хранилище параметров. Для инициализации хранилища параметров используется служба параметров самой платформы. Классу ReadmePlugin необходимо лишь реализовать метод, который восстанавливает стандартные значения управляющих элементов. Эти значения используются во время первого просмотра страницы параметров либо при нажатии на кнопку По умолчанию на странице параметров.
protected void initializeDefaultPreferences(IPreferenceStore store) { // Эти параметры появляются, если окно Параметры // открывается впервые. store.setDefault(IReadmeConstants.PRE_CHECK1, true); store.setDefault(IReadmeConstants.PRE_CHECK2, true); store.setDefault(IReadmeConstants.PRE_CHECK3, false); store.setDefault(IReadmeConstants.PRE_RADIO_CHOICE, 2); store.setDefault(IReadmeConstants.PRE_TEXT, MessageUtil.getString("Default_text")); //$NON-NLS-1$ }
Примечание: В том случае, если параметры модуля отсутствуют, модуль получает пустое хранилище параметров.
После связывания хранилища параметров модуля со страницей параметров создается алгоритм для получения и сохранения параметров.
Страницы параметров инициализируют значения управляющих элементов с помощью значений параметров из хранилища параметров. Этот процесс аналогичен инициализации значений управляющих элементов в параметрах окна диалога. Класс ReadmePreferencePage инициализирует все управляющие элементы в одном методе, initializeValues, который вызывается из метода createContents.
private void initializeValues() { IPreferenceStore store = getPreferenceStore(); checkBox1.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK1)); checkBox2.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK2)); checkBox3.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK3)); ... }
После нажатия на кнопку OK (или Применить) текущие значения управляющих элементов на странице параметров сохраняются в хранилище параметров. Класс ReadmePreferencePage реализуют данный алгоритм в отдельном методе storeValues.
private void storeValues() { IPreferenceStore store = getPreferenceStore(); store.setValue(IReadmeConstants.PRE_CHECK1, checkBox1.getSelection()); store.setValue(IReadmeConstants.PRE_CHECK2, checkBox2.getSelection()); store.setValue(IReadmeConstants.PRE_CHECK3, checkBox3.getSelection()); ... }
После нажатия кнопки По умолчанию платформа восстанавливает все стандартные значения параметров, указанные в классе модуля. Страница параметров должна обновить эти значения в управляющих элементах. Класс ReadmePreferencePage реализует это в методе initializeDefaults.
private void initializeDefaults() { IPreferenceStore store = getPreferenceStore(); checkBox1.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK1)); checkBox2.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK2)); checkBox3.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK3)); ... }