A JFace bedolgozó egy keretrendszert biztosít a varázslók, beállítási oldalak és párbeszédablakok megvalósításához. Ezen párbeszédablakok megvalósítása közös mintát követ. Egy oldal vagy párbeszédablak tartalma egy createContents metódus megvalósítása által kerül megadásra, amely létrehozza az oldaltartalmat ábrázoló SWT vezérlőket. Ezen metódusnak figyelőket is fel kell vennie azon eseményekhez, amelyek érdekelnek minket. Az oldal felelős az összetétel létrehozásáért és visszaadásáért, amely az oldal vezérlőjének szülője lesz. Az alábbi részlet megjeleníti a kiemeléseket:
protected Control createContents(Composite parent) { ... //composite_textField << szülő 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 << szülő Composite composite_tab = createComposite(parent, 2); Label label1 = createLabel(composite_tab, MessageUtil.getString("Radio_Button_Options")); // tabForward(composite_tab); //választógomb összetétel << lap összetett 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 << szülő 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 metódusban lévő kód nagy része a vezérlők létrehozásával és elrendezésével kapcsolatos, így itt nem elemezzük őket. A megfelelő oldal az alábbi módon néz ki:
A beállításoldal másik elsődleges felelőssége a performOk üzenetre megválaszolása. Ez a metódus jellemzően frissíti és tárolja a felhasználói beállításokat, és ha szükséges, frissíti a többi bedolgozóobjektumot, hogy ábrázolja a beállítások módosításait. A performDefaults metódus visszaállítja a beállításokat az alapértelmezett értékekre, amikor a felhasználó megnyomja az Alapértelmezések visszaállítása gombot.
Felülírhatja a performApply elemet, ha további feldolgozás is van, amikor a felhasználó kiválasztja az Alkalmazás gombot. Az alapértelmezett megvalósítás a performOk meghívása.
A beállításoldalaknak felül kell írnia a doGetPreferenceStore() metódust a beállítástárolók visszaadásához az értékek tárolása érdekében.
A beállítástárolók kényelmi mechanizmusok a bedolgozóosztályokban lévő beállítási értékek eléréséhez és tárolásához. Bedolgozó szintű hozzáférést biztosítanak a ténylegesen tárolt beállításokhoz a futási beállítások szolgáltatás segítségével. Az AbstractUIPlugin egy bedolgozó szintű beállítástárolót határoz meg, amely a bedolgozó élettartamma alatt él. A bedolgozó hozzáadhat bejegyzéseket a beállítástárolóhoz, és frissítheti az értékeket, amikor a felhasználó módosítja ezen beállítások oldal beállításait. Mivel a beállítástárolók a platform beállítások szolgáltatást használják, foglalkozni fognak a beállítási értékek mentésével a megfelelő hatókörben és helyen, és a megfelelő mechanizmusok segítségével inicializálják a beállítástárolót.
A ReadmePreferencePage elemben lévő alábbi kód lekéri a tárolót a ReadmePlugin-hoz.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Mivel a ReadmePlugin kiterjeszti az AbstractUIPlugin osztályt, automatikusan örököl egy beállítástárolót. Ez a beállítástároló a platform beállítások szolgáltatás segítségével kerül inicializálásra. Az egyetlen dolog, amit a ReadmePlugin elemnek meg kell tenni, hogy megvalósít egy metódust, amely inicializálja a beállításvezérlőket az alapértelmezett értékekhez. Az értékek a beállításoldal első megjelenítésekor kerülnek használatra, vagy ha a felhasználó megnyomja az Alapértelmezések gombot a beállítások oldalon.
protected void initializeDefaultPreferences(IPreferenceStore store) { // Ezek a beállítások a Beállítás párbeszédablak // első megnyitásakor jelennek meg. 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$ }
Megjegyzés: Ha nincsenek beállítások mentve a bedolgozóhoz, akkor a bedolgozó egy üres beállítástárolót kap.
Ha a bedolgozó beállítástárolóját hozzárendelte egy beállításoldalhoz, akkor megvalósíthatja a logikát a beállítások lekéréséhez és mentéséhez.
A beállításoldalak felelősek a vezérlők értékeinek inicializálásáért a beállítástároló beállításai segítségével. Ez a folyamat hasonló a párbeszédablak-vezérlők párbeszédablak-beállításokból inicializálásához. A ReadmePreferencePage az initializeValues egyszerű metódusban inicializálja az összes vezérlőt, amely a createContents metódusból kerül meghívásra.
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)); ... }
Az OK (vagy Alkalmazás) gomb megnyomásakor a beállításoldalon lévő vezérlő aktuális értékeit el kell tárolni a beállítástárolóban. A ReadmePreferencePage megvalósítja ezt a logikát egy különálló storeValues metódusban.
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()); ... }
Ha a felhasználó megnyomja az Alapértelmezések gombot, akkor a platform visszaállítja az összes beállítástároló-értéket a bedolgozóosztályban megadott alapértelmezett értékekre. A beállításoldal felelős ezen alapértelmezett értékek ábrázolásáért a beállításoldal vezérlőin. A ReadmePreferencePage ezt az initializeDefaults metódusban valósítja meg.
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)); ... }