# Eclipse Plugin PreferencePage BooleanFieldEditor



## mariechen11 (25. Nov 2018)

Hi,

ich habe für mein Eclipse Plugin eine eigene Preference Page erstellt. Diese umfasst ein DirectoryFieldEditor um ein Verzeichnis auszuwählen, ein FileFieldEditor um eine Datei auszuwählen und ein BooleanFieldEditor. Das Anzeigen und Ändern der Preferences funktioniert alles prima.

Ich habe nur das Problem, dass immer, wenn ich noch nicht auf der PreferencePage war, der Wert des BooleanFieldEditor immer als "false" angegeben wird, wenn ich es auslese, obwohl "true" eingestellt ist in den Preferences. Die Werte der anderen beiden Properties sind korrekt. Nur der Wert des BooleanFieldEditor stimmt initial nicht. Auslesen der Properties erfolgt mit:


```
IPreferenceStore store = Activator.getDefault().getPreferenceStore();

store.getBoolean(MeinePreferencePage.FILE_PREFERENCE)
store.getBoolean(MeinePreferencePage.CONTAINER_DIR_PREFERENCE)
store.getBoolean(MeinePreferencePage.MEINE_CECHKBOX)
```


Wenn ich das Eclipse starte, dann vorher einmal auf die PreferencePage gehe, und dann den Wert des Property auslese, dann wird mir der korrekte Wert mit "true" zurückgegeben.

Seltsam ist auch, dass mir immer "false" zurückgegeben wird, wenn ich nicht vorhher einmal auf der PreferencePages war, aber angezeigt in der PreferencePage wird der Wert des BooleanFieldEditor korrekt mit "true" (also die Checkbox ist angehakt).
Also wenn ich die Checkbox "anwähle", so dass sie true ist, das Eclipse zu mache und wieder neu starte und in die PreferencesPage gehe, dann ist die Checkbox auch gechecked. Trotzdem würde mir "false" zurückgegeben werden, wenn ich nicht einmal auf die Preferences navigiere.


Hier der Code meiner PreferencePage:

```
public class MeinePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
   
    public static final String FILE_PREFERENCE = "file";
    public static final String CONTAINER_DIR_PREFERENCE = "containerDir";   
    public static final String MEINE_CECHKBOX = "meineCheckBox";

    DirectoryFieldEditor containerDir;
    FileFieldEditor dockerFile;
    BooleanFieldEditor pullDockerFromReg;
   
    public MeinePreferencePage() {
        super(GRID);
       
        // Set the preference store for the preference page.
        setPreferenceStore(Activator.getDefault().getPreferenceStore());
    }

    /**
     * Creates the user-input-fields
     */
    protected void createFieldEditors() {
        containerDir = new DirectoryFieldEditor(CONTAINER_DIR_PREFERENCE, "Verzeichnis auswaehlen: ", getFieldEditorParent());
        addField(containerDir);
           
        dockerFile = new FileFieldEditor(FILE_PREFERENCE, "Datei auswaehlen: ", getFieldEditorParent());
        addField(dockerFile);
       
        pullDockerFromReg = new BooleanFieldEditor(MEINE_CECHKBOX, "Bitte auswaehlen", getFieldEditorParent());
        addField(pullDockerFromReg);
    }
   
   
    /**
     * specifies the default-values (e.g for the 'Restore-Default'-button)
     *
     */
    private void setDefaultValues(){
        IPreferenceStore store = Activator.getDefault().getPreferenceStore();
        store.setDefault(FILE_PREFERENCE, true);
        store.setDefault(CONTAINER_DIR_PREFERENCE, "defaultPath");
    }
   
    /**
     * Validates the input of the Preference Page
     */
    @Override
    protected void checkState() {
        super.checkState();

        if (StringUtils.isBlank(containerDir.getStringValue())) {
            setErrorMessage("Please choose a container directory.");
            setValid(false);
            return;
        }
       
        setErrorMessage(null);
        setValid(true);
    }

   
    public void init(IWorkbench workbench) {
        setDefaultValues();
    }
}
```

Ich verstehe nicht was falsch ist. Ich hab das doch alles für die drei Properties gleich implementiert. Wieso fällt der BooleanFieldEditor so aus der Reihe?


----------



## mihe7 (25. Nov 2018)

Ich habe keine Ahnung von dem ganzen Zeug, mir fällt nur auf, dass in setDefaultValues MEINE_CECHKBOX (Edit: "korrigiert") fehlt.


----------

