如何捕获第一次显示WizardPage
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何捕获第一次显示WizardPage相关的知识,希望对你有一定的参考价值。
我正在为Eclipse编写一个带有一些页面的小向导,我需要抓住第一次显示页面的那一刻。
我检查了构造函数和createControl
,但它们在Wizard
对象(addPages
)的创建时刻被调用。
有没有办法得到我需要的东西?也许有人知道一些伎俩?
答案
您可以在WizardPage中覆盖setVisible(boolean)方法。例如,使用类似的东西:
private boolean initialized = false;
@Override
public void setVisible(boolean visible) {
if (!initialized && visible) {
//do something
initialized = true;
}
control.setVisible(visible);
}
另一答案
您可以使用在IPageChangedListener
上注册的IpageChangingListener
或WizardDialog。当向导的当前页面发生更改时,将通知他们。
另一答案
我喜欢在第一次绘画后删除听众。这样你就不需要额外的布尔字段了,你可以避免不必要的调用paintControl并每次检查那个布尔值。
container.addPaintListener(new PaintListener()
{
@Override
public void paintControl(PaintEvent e)
{
doUsefulStuff();
container.removePaintListener(this);
}
});
另一答案
好吧,我为paint事件创建了一个监听器,并使用了一个标志m_isFirsTime
,它由Wizard类控制:
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
setControl(container);
container.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent arg0) {
if (m_isFirstTime) {
m_isFirstTime = false;
StartXMLParsing();
}
}
});
...
}
对我来说没关系。
另一答案
控件创建后执行异步UI任务,执行长init操作。 UI已经创建并在Runnable启动时显示,因此向导立即出现,用户可以看到初始化进度:
public void createControl(Composite parent) {
// create controls
getContainer().getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
try {
getContainer().run(false, false, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor arg0) throws InvocationTargetException, InterruptedException {
// init and validate controls here
}
});
} catch (InvocationTargetException e) {
// handle e.getCause();
} catch (InterruptedException e) {
// nothing
}
}
});
}
以上是关于如何捕获第一次显示WizardPage的主要内容,如果未能解决你的问题,请参考以下文章