swt - 如何使 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());
}
但我通常会在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
。相反,只需确定您接下来想要哪个页面并返回它。
推荐阅读
- php - 试图将数据作为对象数组取回,但在 php 中获取数组对象数组
- angular - 将外部数据传递给 Angular-CLI 应用程序
- webpack - ASP.NET Core + Webpack - 未捕获的 ReferenceError:使用 DllReferencePlugin 时未定义供应商
- php - 与 PHP 一起使用时,Imagemagick 转换命令返回错误代码 4
- php - plesk 中的 Codeigniter base_url
- excel - 用户窗体错误:对象“_VBComponent”的方法“属性”失败
- c++ - 为什么使用 make_unique<> 将函数传递给线程会导致 Valgrind 中的内存泄漏?
- java - 发送 json 数据时的空指针
- swift - Swift - 在 TabbarController 中切换选项卡时保持相同的实例化 UIViewController
- wordpress - Wordpress:使用 add_filter 函数将类添加到 div