JFace-plugin'en indeholder en ramme til brug for implementering af guider, indstillingssider og dialogbokse. Implementeringen af disse dialogbokse følger et fælles mønster. Indholdet af en side eller en dialogboks defineres ved, at der implementeres en createContents-metode, der opretter SWT-kontroller, som repræsenterer sideindholdet. Denne metode tilføjer også lyttere til brug for interessante aktiviteter. Siden er ansvarlig for oprettelse og returnering af den sammensætning, der er overordnet alle sidens kontroller. Følgende stykke kode viser det væsentligste:
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); }
Det meste af koden i denne metode beskæftiger sig med kontrollernes oprettelse og layout, og det vil ikke blive gennemgået her. Sådan ser den tilsvarende side ud:
Det andet vigtige ansvarsområde, som indstillingssiden har, er at reagere på meddelelsen performOk. Denne metode opdaterer og lagrer typisk brugerindstillinger, og hvis det er nødvendigt også andre plugin-objekter for at afspejle indstillingsændringen. Metoden performDefaults bruges til at gendanne de oprindelige værdier for indstillinger, når brugeren klikker på knappen Gendan standarder.
Du kan tilsidesætte performApply, hvis du har yderligere behandling, der skal udføres, når brugeren vælger Anvend. Standardimplementeringen er at kalde performOk.
Indstillingssider bør tilsidesætte metoden doGetPreferenceStore() for at returnere et indstillingslager til opbevaring af værdier.
Indstillingslagre er en nyttig mekanisme til at få adgang til og lagre indstillingsværdier i en plugin-klasse. De stiller adgang til rådighed på plugin-niveau for indstillinger, der lagres vha. serviceprogrammet for runtime-indstillinger. AbstractUIPlugin definerer et indstillingslager på tværs af plugins, som vedligeholdes hele plugin'ens levetid. Plugin'en kan tilføje indgange til dette indstillingslager og opdatere værdierne, efterhånden som brugeren ændrer indstillinger på indstillingssiden. Da indstillingslagre bruger platformens serviceprogram til indstillinger, sørger de for at gemme indstillingsværdier i et relevant omfang og på den relevante placering og for at initialisere indstillingslageret vha. de relevante mekanismer.
Følgende kode i ReadmePreferencePage henter indstillingslageret for ReadmePlugin.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Fordi ReadmePlugin udvider AbstractUIPlugin-klassen, overtager den automatisk et indstillingslager. Dette indstillingslager initialiseres vha. platformens serviceprogram for indstillinger. Det eneste, ReadmePlugin skal udføre, er at implementere en metode, der initialiserer indstillingskontrollerne med deres standardværdier. Disse værdier bruges første gang indstillingssiden vises, eller når brugeren klikker på knappen Standardværdier på indstillingssiden.
protected void initializeDefaultPreferences(IPreferenceStore store) { // Disse indstillinger vises, når dialogboksen Indstillinger // åbnes for første gang. 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$ }
Bemærk: Hvis der ikke er gemt indstillinger til en plugin noget sted, får plugin'en et tomt indstillingslager.
Når først du har knyttet plugin'ens indstillingslager til indstillingssiden, kan du implementere logik for hentning og lagring af indstillingerne.
Indstillingssider er ansvarlige for at initialisere kontrollernes værdier vha. indstillingerne fra indstillingslageret. Denne proces ligner initialisering af værdier for dialogbokskontroller fra dialogboksindstillingerne. ReadmePreferencePage initialiserer alle sine kontroller i en enkelt metode, initializeValues, som kaldes fra dens egen createContents-metode.
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)); ... }
Når der klikkes på OK (eller på Anvend), lagres kontrollernes aktuelle værdier på indstillingssiden i indstillingslageret. ReadmePreferencePage implementerer denne logi i en separat metode, 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()); ... }
Når brugeren klikker på knappen Standardværdier, genindsætter platformen de standardværdier, der er angivet i plugin-klassen, for alle værdierne i indstillingslageret. Men indstillingssiden er ansvarlig for, at disse standardværdier afspejles i kontrollerne på indstillingssiden. ReadmePreferencePage implementerer dette i 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)); ... }