如何使 Eclipse 向导的页面像树一样?

How to make eclipse wizard acts like tree with its pages?

据我所知,如果向导 class:

,所有 Eclipse 向导在此方法中都有线性导航
@Override
public void addPages() {
    addPage(wizard class);
}

但在第一个向导页面我想管理下一页。我的 WizardPage:

有枚举 class
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());
    }

但我通常在 ActionPage 之后移动到 RemotePage,而不考虑我在 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);
    }

不要尝试在 getNextPage 中创建新页面。在 addPages 方法中创建所有页面,并在 getNextPage.

中创建其中一个页面 return

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

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

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

不要打电话给 super.getNextPage。相反,只需确定下一页和 return。