Eclipse RCP: как OpenPreferencesAction на определенной странице?

Как сделать так, чтобы диалоговое окно настроек открывалось на определенной странице? При этом открывается pref. диалог на первой странице по умолчанию:

OpenPreferencesAction action = new OpenPreferencesAction();
action.run();

Как я могу указать ему отображать другую страницу из дерева настроек?


person Dima    schedule 09.07.2009    source источник


Ответы (2)


Вам нужно создать собственное действие, расширяющее OpenPreferencesAction и переопределяющее метод run(), передавая идентификатор открываемой страницы. Если вы посмотрите на OpenPreferencesAction, вы увидите, что метод запуска выглядит следующим образом:

public void run() {
    if (workbenchWindow == null) {
        // action has been dispose
        return;
    }
    PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null, null, null, null);
    dialog.open();
}

Второй и третий параметры определяют идентификатор отображаемой страницы и критерии фильтрации.

person Rich Seller    schedule 09.07.2009

Откройте диалоговое окно страницы настроек (нажмите кнопку меню) в Eclipse RCP.

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import com_demo.PreferencePage.PreferencePage_Dialog;

public class Preferences_Dialog_cmd extends AbstractHandler {

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        PreferenceDialog pref = PreferencesUtil.createPreferenceDialogOn(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),PreferencePage_Dialog.ID , null, null);
        if (pref != null)
                pref.open();
        return null;
    }   
}

public class PreferencePage_Dialog extends FieldEditorPreferencePage implements IWorkbenchPreferencePage 
{
    public static final String ID="custom_bill.PreferencePage_Dialog";
    @Override
    protected void createFieldEditors() {
        //..........
    }

    @Override
    public void init(IWorkbench workbench) {
        setPreferenceStore(Activator.getDefault().getPreferenceStore());
    }
}
person Chetan Bhagat    schedule 21.03.2017