如何捕获第一次显示WizardPage

问题描述 投票:4回答:5

我正在为Eclipse编写一个带有一些页面的小向导,我需要抓住第一次显示页面的那一刻。

我检查了构造函数和createControl,但它们在Wizard对象(addPages)的创建时刻被调用。

有没有办法得到我需要的东西?也许有人知道一些伎俩?

java eclipse-plugin swt wizard
5个回答
3
投票

您可以在WizardPage中覆盖setVisible(boolean)方法。例如,使用类似的东西:

private boolean initialized = false;

@Override
public void setVisible(boolean visible) {
    if (!initialized && visible) {
        //do something
        initialized = true;
    }
    control.setVisible(visible);
}

2
投票

您可以使用在IPageChangedListener上注册的IpageChangingListenerWizardDialog。当向导的当前页面发生更改时,将通知他们。


1
投票

我喜欢在第一次绘画后删除听众。这样你就不需要额外的布尔字段了,你可以避免不必要的调用paintControl并每次检查那个布尔值。

container.addPaintListener(new PaintListener()
{
    @Override
    public void paintControl(PaintEvent e)
    {
        doUsefulStuff();
        container.removePaintListener(this);
    }
});

0
投票

好吧,我为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();
            }
        }
    });
...
}

对我来说没关系。


0
投票

控件创建后执行异步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
            }
        }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.