Field editors

The implementation of a preference page is primarily SWT code.  SWT code is used to create the preference page controls, set the values of the controls, and retrieve the values of the controls. The org.eclipse.jface.preference package provides helper classes, called field editors, that create the widgets and implement the value setting and retrieval code for the most common preference types. The platform provides field editors for displaying and updating many value types, including booleans, colors, strings, integers, fonts, and file names.

FieldEditorPreferencePage implements a page that uses these field editors to display and store the preference values on the page.  Instead of creating SWT controls to fill its contents, a FieldEditorPreferencePage subclass creates field editors to display the contents.  All of the fields on the page must be implemented as field editors.  The following is a snippet from the debug UI preferences page:

protected void createFieldEditors() {
	addField(new BooleanFieldEditor(IDebugUIConstants.PREF_BUILD_BEFORE_LAUNCH, 
		SWT.NONE, getFieldEditorParent())); 
	String[][] perspectiveNamesAndIds = getPerspectiveNamesAndIds();
	addField(new ComboFieldEditor(IDebugUIConstants.PREF_SHOW_DEBUG_PERSPECTIVE_DEFAULT,
		DebugPreferencesMessages.getString("DebugPreferencePage.Default_perspective_for_Debug_2"), //$NON-NLS-1$

Each field editor is assigned the name of its corresponding preference key and the text label for the SWT control that it will create. The kind of control created depends on the type of field editor. For example, a boolean field editor creates a checkbox.

Since the preference page is associated with a preference store (specified in the doGetPreferenceStore method), the code for storing the current values, for initializing the control values from the preference store, and for restoring the controls to their default values can all be implemented in the FieldEditorPreferencePage.

The FieldEditorPreferencePage will use a grid layout with one column as the default layout for field editor widgets.  For special layout requirements, you can override the createContents method.