如何捕获第一次显示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上注册的IpageChangingListenerWizardDialog。当向导的当前页面发生更改时,将通知他们。

另一答案

我喜欢在第一次绘画后删除听众。这样你就不需要额外的布尔字段了,你可以避免不必要的调用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的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段中从相机捕获图像,

如何在android中将json数据加载到片段中

JFace的wizardPage是用Next 按钮触发的,请问点击Next按钮将执行哪个函数

我该如何做模态对话框片段(代码在我关闭之前不会执行)

Android:通过片段进行相机预览。从活动中确定

从片段中捕获图像