Java 如何捕获向导页面的第一次显示
我正在为Eclipse编写一个带有一些页面的小向导,我需要抓住第一次显示页面的时刻 我检查了构造函数和Java 如何捕获向导页面的第一次显示,java,eclipse-plugin,swt,wizard,Java,Eclipse Plugin,Swt,Wizard,我正在为Eclipse编写一个带有一些页面的小向导,我需要抓住第一次显示页面的时刻 我检查了构造函数和createControl,但它们在向导的对象(addPages)中的创建时刻被调用 有办法得到我需要的东西吗?也许有人知道一些诀窍?您可以使用在上注册的IPageChangedListener或IpageChangingListener。当向导的当前页面更改时,将通知他们。您可以覆盖向导页面中的setVisible(布尔)方法。例如,使用以下内容: private boolean initia
createControl
,但它们在向导的对象(addPages
)中的创建时刻被调用
有办法得到我需要的东西吗?也许有人知道一些诀窍?您可以使用在上注册的IPageChangedListener
或IpageChangingListener
。当向导的当前页面更改时,将通知他们。您可以覆盖向导页面中的setVisible(布尔)方法。例如,使用以下内容:
private boolean initialized = false;
@Override
public void setVisible(boolean visible) {
if (!initialized && visible) {
//do something
initialized = true;
}
control.setVisible(visible);
}
好的,我为绘画事件创建了一个监听器,并使用了一个标志m_isFirsTime
,该标志由向导类控制:
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();
}
}
});
...
}
这对我来说没关系。我更喜欢在第一次绘画后移除监听器。这样,您就不需要额外的布尔字段,并且避免了不必要的调用paintControl和每次检查该布尔值
container.addPaintListener(new PaintListener()
{
@Override
public void paintControl(PaintEvent e)
{
doUsefulStuff();
container.removePaintListener(this);
}
});
创建控件后,将执行异步UI任务,其中可以执行长初始化操作。Runnable启动时已创建并显示UI,因此向导立即出现,用户可以看到初始化进度:
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
}
}
});
}
我不使用WizardDialog
,而是使用org.eclipse.jface.wizard.wizard
和org.eclipse.ui.INewWizard
。在这种情况下,我不知道如何使用IPageChangedListener
或IpageChangingListener
。@user433689使用Wizard.getContainer()
检索向导对话框
谢谢,我使用了另一种方法请解释您的解决方案!创建控件后,将执行异步UI任务,其中可以执行长初始化操作。当Runnable启动时,UI已经创建并显示,因此向导会立即出现,用户可以看到初始化过程。我的意思是,对我来说不是,请将此解释放入您的答案中以使其完整,如果有人检查它,他将看到您的解决方案工作的原因。