O plug-in JFace proporciona um quadro para implementar assistentes, páginas de preferências e diálogos. A implementação destes diálogos segue um padrão comum. O conteúdo de uma página ou diálogo é definido pela implementação de um método createContents que cria os controlos de SWT que representam o conteúdo da página. Este método deve também adicionar ouvintes para quaisquer eventos de interesse. A página é responsável por criar e devolver o compósito que será ascendente de todos os controlos na página. A porção de código seguinte mostra os destaques:
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);
}
A maioria do código neste método prende-se com a criação e esquematização dos controlos, de modo que não as abordamos aqui. A página correspondente assemelha-se ao seguinte:

A outra responsabilidade principal de uma página de preferências consiste em reagir à mensagem performOk. Regra geral, este método actualiza e armazena as preferências de utilizador e, se necessário, actualiza outros objectos de plug-in para reflectirem a alteração nas preferências. O método performDefaults é utilizado para restaurar o estado predefinido das preferências quando o utilizador prime o botão Restaurar Predefinições.
Poderá sobrepor performApply se tiver processamento adicional quando o utilizador seleccionar Aplicar. A implementação predefinida consiste em chamar performOk.
As páginas de preferências devem sobrepor o método doGetPreferenceStore() para devolver um arquivo de preferências para armazenar os respectivos valores.
Os arquivos de preferências são um mecanismo conveniente para aceder e armazenar valores de preferências numa classe de plug-in. Proporcionam acesso de nível de plug-in a preferências que estejam realmente armazenadas com o serviço de preferências de tempo de execução. AbstractUIPlugin define um arquivo de preferências de plug-ins abrangente que é mantido durante o ciclo de vida do plug-in. O plug-in pode adicionar entradas a este arquivo de preferências e actualizar os valores à medida que o utilizador altera as definições na página de preferências. Dado que os arquivos de preferências utilizam o serviço de preferências da plataforma, encarregam-se de guardar valores de preferências no âmbito e na localização apropriados, e de inicializar o arquivo de preferências com os mecanismos apropriados.
O código seguinte na ReadmePreferencePage obtém o arquivo de preferências para o ReadmePlugin.
protected IPreferenceStore doGetPreferenceStore() {
return ReadmePlugin.getDefault().getPreferenceStore();
}
Dado que o ReadmePlugin estende a classe AbstractUIPlugin, herda automaticamente um arquivo de preferências. Este arquivo de preferências é inicializado com o serviço de preferências da plataforma. A única coisa que o ReadmePlugin tem que fazer é implementar um método que inicialize os controlos de preferências nos respectivos valores predefinidos. Estes valores são utilizados da primeira vez que a página de preferências é mostrada ou quando o utilizador premir o botão Predefinições na página de preferências.
protected void initializeDefaultPreferences(IPreferenceStore store) {
// These settings will show up when Preference dialog
// opens up for the first time.
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$
}
Nota: Se não houver preferências de plug-in guardadas em lugar algum, o plug-in irá obter um arquivo de preferências vazio.
Uma vez associado o arquivo de preferências do plug-in à página de preferências, poderá implementar a lógica para obter e guardar as preferências.
As páginas de preferências são responsáveis pela inicialização de valores dos seus controlos mediante as definições de preferências oriundas do arquivo de preferências. Este processo é semelhante a inicializar valores de controlos de diálogos nas definições do diálogo. A ReadmePreferencePage inicializa todos os seus controlos num único método, initializeValues, o qual é chamado a partir do seu método 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));
...
}
Quando se prime o botão OK (ou Aplicar), os valores actuais dos controlos da página de preferências devem ser armazenados no arquivo de preferências. A ReadmePreferencePage implementa esta lógica num método separado, 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());
...
}
Quando o utilizador prime o botão Predefinições, a plataforma restaura as predefinições de todos os valores do arquivo de preferências especificados na classe do plug-in. Todavia, a página de preferências é responsável por reflectir estas predefinições nos controlos na página de preferências. A ReadmePreferencePage implementa isto em 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));
...
}