首页 > 解决方案 > 如何使 Eclipse 向导的页面像树一样?

问题描述

据我所知,如果 Wizard 类,所有 Eclipse 向导在此方法中都有线性导航:

@Override
public void addPages() {
    addPage(wizard class);
}

但是在第一个向导页面上,我想管理下一页。我在我的枚举类WizardPage

enum SELECTED_ACTION {
        CREATE, LOAD_LOCAL, LOAD_REMOTE
    }

    SELECTED_ACTION action;

然后我尝试覆盖下一页方法:

  @Override
 public IWizardPage getNextPage() {
IWizardPage nextPage = super.getNextPage();
if (nextPage == null) {
    if (action != null && action == action.LOAD_REMOTE) {
        nextPage = new RemotePage("");
    }

    if (action != null && action == action.CREATE) {
        nextPage = new TestWixzard();
    }
}
return nextPage;
}

与先前添加的页面:

@Override
    public void addPages() {
        startPage = new ActionPage("some title");

        addPage(new ActionPage(""));
        addPage(new RemotePage(""));
        addPage(new TestWixzard());
    }

但我通常会在ActionPageRemotePage考虑我在ActionPage. 也许我做错了,因为当我删除所有两个下一页时,我看不到任何下一步按钮,所以我认为这是错误的。我可以在 ActionPage 中更改操作类型:

@Override
    public void createControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(1, false);
        container.setLayout(layout);
        Group group = new Group(container, SWT.BORDER);
        group.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

        Button local = new Button(group, SWT.RADIO);
        local.setText(Messages.SelectSolutionDialog_btn_continue_text);
        local.addListener(SWT.Selection, new Listener() {
            @Override
            public void handleEvent(Event e) {
                switch (e.type) {
                case SWT.Selection:
                    action = SELECTED_ACTION.LOAD_LOCAL;
                    getContainer().updateButtons();
                }
            }
        });
        Button load = new Button(group, SWT.RADIO);
        load.setText(Messages.SelectSolutionDialog_btn_load_text);
        load.addListener(SWT.Selection, new Listener() {
            @Override
            public void handleEvent(Event e) {
                switch (e.type) {
                case SWT.Selection:
                    action = SELECTED_ACTION.LOAD_REMOTE;
                    getContainer().updateButtons();
                }
            }
        });
        Button create = new Button(group, SWT.RADIO);
        create.setText(Messages.SelectSolutionDialog_btn_new_text);
        create.addListener(SWT.Selection, new Listener() {
            @Override
            public void handleEvent(Event e) {
                switch (e.type) {
                case SWT.Selection:
                    action = SELECTED_ACTION.CREATE;
                    getContainer().updateButtons();
                }
            }
        });

        setControl(container);
        setPageComplete(false);
    }

标签: swtjface

解决方案


不要尝试在getNextPage. 在方法中创建所有页面addPages并返回其中一个页面getNextPage

您可以通过以下方式获取现有页面:

IWizardPage page = getWizard().getPage("pageName");

其中pageName是指定页面的构造函数的名称。

不要打电话super.getNextPage。相反,只需确定您接下来想要哪个页面并返回它。


推荐阅读