在 Eclipse WizardPage 中 - 在页面之间导航的问题

In Eclipse WizardPage - Issues in Navigating between pages

我写了一个小程序,可以从一页导航到另一页。但我无法那样做。

我的要求是

在 PageOne 上,如果用户输入一个值,则应该对其进行验证,即在本例中为“123”进行简单比较。 如果匹配则继续下一页,如下所示:

第一页

第二页

否则抛出下面的对话框:

第一页

第一页代码:

    package testing.importWizards;

    import org.eclipse.jface.dialogs.MessageDialog;
    import org.eclipse.jface.wizard.IWizardPage;
    import org.eclipse.jface.wizard.WizardPage;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.KeyEvent;
    import org.eclipse.swt.events.KeyListener;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;

    public class PageOne extends WizardPage {
        private Text text1;
        private Composite container;
        boolean isVisible=false;

        public PageOne() {
            super("Page One");
            setTitle("Page One");
            setDescription("Fake Wizard: Page One");
        }

        @Override
        public void createControl(Composite parent) {
            container = new Composite(parent, SWT.NONE);
            GridLayout layout = new GridLayout();
            container.setLayout(layout);
            layout.numColumns = 2;
            Label label1 = new Label(container, SWT.NONE);
            label1.setText("Put a value here.");

            text1 = new Text(container, SWT.BORDER | SWT.SINGLE);
            text1.setText("");
            text1.addKeyListener(new KeyListener() {

                @Override
                public void keyPressed(KeyEvent e) {
                }

                @Override
                public void keyReleased(KeyEvent e) {
                    if (!text1.getText().isEmpty()) {
                        setPageComplete(true);
                    }
                }
            });
            GridData gd = new GridData(GridData.FILL_HORIZONTAL);
            text1.setLayoutData(gd);
            setControl(container);
            setPageComplete(false);
        }


        @Override
        public IWizardPage getNextPage() {
            // TODO Auto-generated method stub

            Shell shell=getShell();
            return super.getNextPage();
        }

        public String getText1() {
            return text1.getText();
        }
    }

第二页代码:

    package testing.importWizards;


    import org.eclipse.jface.wizard.WizardPage;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.KeyEvent;
    import org.eclipse.swt.events.KeyListener;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Text;

    public class PageTwo extends WizardPage {
        private Text text1;
        private Composite container;

        public PageTwo() {
            super("Page Two");
            setTitle("Page Two");
            setDescription("Fake Wizard: Page Two");
        }

        @Override
        public void createControl(Composite parent) {
            container = new Composite(parent, SWT.NONE);
            GridLayout layout = new GridLayout();
            container.setLayout(layout);
            layout.numColumns = 2;
            Label label1 = new Label(container, SWT.NONE);
            label1.setText("Success");

            /*text1 = new Text(container, SWT.BORDER | SWT.SINGLE);
            text1.setText("");
            text1.addKeyListener(new KeyListener() {

                @Override
                public void keyPressed(KeyEvent e) {
                }

                @Override
                public void keyReleased(KeyEvent e) {
                    if (!text1.getText().isEmpty()) {
                        setPageComplete(true);
                    }
                }
            });*/
            GridData gd = new GridData(GridData.FILL_HORIZONTAL);
            //text1.setLayoutData(gd);
            setControl(container);
            //setPageComplete(false);
            setPageComplete(true);
        }

        public String getText1() {
            return text1.getText();
        }
    }

我已经重写了 setVisible 和 getNextPage 方法,但出现错误行为。有人可以向我解释实现验证的逻辑吗?我的整个方法是错误的吗?

向导页面通常使用 setErrorMessagesetError 在向导的顶部区域显示错误,而不是显示对话框。

通常每次页面上的数据更改时都进行验证很方便。对于您的示例页面,例如:

public class PageOne extends WizardPage
{
  private Text text1;

  public PageOne()
  {
    super("testWizardPage");

    setTitle("Page One");
    setDescription("Fake Wizard: Page One");
  }

  @Override
  public void createControl(final Composite parent)
  {
    Composite container = new Composite(parent, SWT.NONE);
    container.setLayout(new GridLayout(2, false));

    Label label1 = new Label(container, SWT.NONE);
    label1.setText("Put a value here.");

    text1 = new Text(container, SWT.BORDER | SWT.SINGLE);
    text1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

    text1.addModifyListener(this::modifyListener);

    setControl(container);

    setPageComplete(false);
  }    

  private void modifyListener(final ModifyEvent event)
  {
    boolean empty = text1.getText().isEmpty();

    if (empty)
      setErrorMessage("Text must be entered");
    else
      setErrorMessage(null);

    setPageComplete(!empty);
  }
}

这是在 text1 字段上使用 'modify listener' 并在每次更改字段时调用 setErrorMessagesetPageComplete