如何使 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。
据我所知,如果向导 class:
,所有 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());
}
但我通常在 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
.
您可以通过以下方式获取现有页面:
IWizardPage page = getWizard().getPage("pageName");
其中 pageName
是指定页面构造函数的名称。
不要打电话给 super.getNextPage
。相反,只需确定下一页和 return。