如何在Eclipse RCP向导中显示错误消息?

时间:2014-11-11 15:54:43

标签: java eclipse swt eclipse-rcp jface

我想显示一条错误消息,该消息显示在向导窗口顶部的向导中(如下面的屏幕截图中的无法创建项目内容... 消息)。

Screenshot

根据我在互联网上发现的内容,我必须使用方法setErrorMessage来执行此操作。

但它在我的向导类中并不存在:

import org.eclipse.jface.wizard.Wizard;

public class MyWizard extends Wizard {
    public MyWizard() {
        super();

        setErrorMessage("Error message"); // No such method
        getContainer().getCurrentPage().setErrorMessage("Error message 2"); // This also doesn't exist
    }

如何设置向导的错误消息?

2 个答案:

答案 0 :(得分:3)

JFace的Wizard有页面。您自己创建这些页面,扩展WizardPage。在该课程中,您将找到setErrorMessage API。

更快的替代方法是使用TitleAreaDialog,它不需要页面。您也可以在那里使用错误API。


实施例

import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * 
 * @author ggrec
 *
 */
public class TestWizard extends Wizard
{

    // ==================== 3. Static Methods ====================

    public static void main(final String[] args)
    {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(1, false));

        final WizardDialog dialog = new WizardDialog(shell, new TestWizard());
        dialog.open();

        if (!display.readAndDispatch())
            display.sleep();
        display.dispose();
    }


    // ==================== 4. Constructors ====================

    private TestWizard()
    {

    }


    // ==================== 5. Creators ====================

    @Override
    public void addPages()
    {
        addPage(new TestPage());
        // Or, you could make a local var out of the page, 
        // and set the error message here.
    }


    // ==================== 6. Action Methods ====================

    @Override
    public boolean performFinish()
    {
        return true;
    } 


    // =======================================================
    //           19. Inline Classes 
    // =======================================================

    private class TestPage extends WizardPage
    {

        private TestPage()
        {
            super(TestPage.class.getCanonicalName());
        }


        @Override
        public void createControl(final Composite parent)
        {
            setControl(new Composite(parent, SWT.NULL));
            setErrorMessage("HOUSTON, WE'RE GOING DOWN !!!!!");
        }

    }

}

答案 1 :(得分:3)

setErrorMessageWizardPage中的一种方法,但它不包含在IWizardPage返回的IWizardContainer.getCurrentPage界面中。

通常是您的向导页面类设置错误消息 - 他们可以调用setErrorMessage(text)