我正在为 Eclipse 编写一个带有一些页面的小向导,我需要捕捉第一次页面显示的时刻。
我检查了构造函数,createControl
但它们在Wizard
对象(addPages
)的创建时刻被调用。
有没有办法得到我需要的东西?也许有人知道一些技巧?
我正在为 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);
}
您可以使用在WizardDialog上注册的aIPageChangedListener
或 a 。当向导的当前页面发生更改时,他们将收到通知。IpageChangingListener
我更喜欢在第一次绘画后移除监听器。这样,您就不需要额外的布尔字段,并且您避免了不必要的调用 paintControl 并每次检查该布尔值。
container.addPaintListener(new PaintListener()
{
@Override
public void paintControl(PaintEvent e)
{
doUsefulStuff();
container.removePaintListener(this);
}
});
好的,我为绘画事件创建了一个侦听器并使用了一个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 任务,其中可以执行长初始化操作。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
}
}
});
}