Eclipse点击New-->Other以后出来一个新建的向导页面. 是一颗树, 选择某个节点以后就可以Next下去了.
其实后面的页面也是Wizard. 也就是说本身也可以独立成为一个WizardDialog, 那么如何将其嵌入到这个总开头页面之后呢?
Eclipse的实现方法看了很久都没有看懂, 最后决定自己尝试其他思路.
看代码:
IWizard wizard = new NewObjectWizard();
WizardDialog dialog = new WizardDialog(window.getShell(), wizard);
dialog.create();
dialog.open();
WizardDialog dialog = new WizardDialog(window.getShell(), wizard);
dialog.create();
dialog.open();
这是呼出第一个页面的Action的代码, 出来的页面就是一棵树的样子, 当然那棵树是在NewObjectWizard里面实现的.
public class NewObjectWizard extends Wizard implements IWizard {
private IWizard currentWizard = null;
private Composite pageContainer;
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
@Override
public void addPages() {
super.addPage(new NewObjectWizardPage());
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
return false;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getWindowTitle()
*/
@Override
public String getWindowTitle() {
return StingIDEMessages.NewWizardDialog_title;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#needsPreviousAndNextButtons()
*/
@Override
public boolean needsPreviousAndNextButtons() {
return true;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#needsProgressMonitor()
*/
@Override
public boolean needsProgressMonitor() {
return false;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getNextPage(org.eclipse.jface.wizard.IWizardPage)
*/
@Override
public IWizardPage getNextPage(IWizardPage page) {
if (page.getName().equals(
NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME)) {
if (currentWizard == null) {
return null;
} else {
return currentWizard.getStartingPage();
}
} else {
return page.getNextPage();
}
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getPreviousPage(org.eclipse.jface.wizard.IWizardPage)
*/
@Override
public IWizardPage getPreviousPage(IWizardPage page) {
if (page.getName().equals(
NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME))
return null;
IWizardPage previous = page.getPreviousPage();
if (previous == null) {
return getPage(NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME);
} else {
return previous;
}
}
/**
* 设置当前得向导
*/
void setCurrentWizard(IWizard wizard) {
this.currentWizard = wizard;
if (wizard != null) {
wizard.addPages();
wizard.createPageControls(pageContainer);
}
getContainer().updateButtons();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#createPageControls(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createPageControls(Composite pageContainer) {
super.createPageControls(pageContainer);
this.pageContainer = pageContainer;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#canFinish()
*/
@Override
public boolean canFinish() {
return currentWizard != null && currentWizard.canFinish();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#dispose()
*/
@Override
public void dispose() {
this.currentWizard = null;
this.pageContainer = null;
super.dispose();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getPage(java.lang.String)
*/
@Override
public IWizardPage getPage(String name) {
if (name.equals(NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME)) {
return super.getPage(name);
} else if (this.currentWizard != null) {
return currentWizard.getPage(name);
} else
return null;
}
private IWizard currentWizard = null;
private Composite pageContainer;
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
@Override
public void addPages() {
super.addPage(new NewObjectWizardPage());
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
return false;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getWindowTitle()
*/
@Override
public String getWindowTitle() {
return StingIDEMessages.NewWizardDialog_title;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#needsPreviousAndNextButtons()
*/
@Override
public boolean needsPreviousAndNextButtons() {
return true;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#needsProgressMonitor()
*/
@Override
public boolean needsProgressMonitor() {
return false;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getNextPage(org.eclipse.jface.wizard.IWizardPage)
*/
@Override
public IWizardPage getNextPage(IWizardPage page) {
if (page.getName().equals(
NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME)) {
if (currentWizard == null) {
return null;
} else {
return currentWizard.getStartingPage();
}
} else {
return page.getNextPage();
}
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getPreviousPage(org.eclipse.jface.wizard.IWizardPage)
*/
@Override
public IWizardPage getPreviousPage(IWizardPage page) {
if (page.getName().equals(
NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME))
return null;
IWizardPage previous = page.getPreviousPage();
if (previous == null) {
return getPage(NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME);
} else {
return previous;
}
}
/**
* 设置当前得向导
*/
void setCurrentWizard(IWizard wizard) {
this.currentWizard = wizard;
if (wizard != null) {
wizard.addPages();
wizard.createPageControls(pageContainer);
}
getContainer().updateButtons();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#createPageControls(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createPageControls(Composite pageContainer) {
super.createPageControls(pageContainer);
this.pageContainer = pageContainer;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#canFinish()
*/
@Override
public boolean canFinish() {
return currentWizard != null && currentWizard.canFinish();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#dispose()
*/
@Override
public void dispose() {
this.currentWizard = null;
this.pageContainer = null;
super.dispose();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getPage(java.lang.String)
*/
@Override
public IWizardPage getPage(String name) {
if (name.equals(NewObjectWizardPage.NEW_OBJECT_WIZARD_PAGE_NAME)) {
return super.getPage(name);
} else if (this.currentWizard != null) {
return currentWizard.getPage(name);
} else
return null;
}