В Eclipse WizardPage - Проблемы при переходе между страницами - PullRequest
0 голосов
/ 24 августа 2018

Я написал небольшую программу, которая должна перемещаться с одной страницы на другую. Но я не могу этого сделать.

Мое требование

В PageOne, если пользователь вводит значение, оно должно быть проверено, т.е. при простом сравнении в этом случае это «123». если это соответствует, перейдите к следующей странице, как показано ниже:

Первая страница

enter image description here

Страница вторая

enter image description here

иначе выведите диалоговое окно ниже:

Первая страница

enter image description here

Код первой страницы:

    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();
        }
    }

У меня есть методы переопределения teid setVisible и getNextPage, но я получаю ошибочное поведение. Может ли кто-нибудь объяснить мне логику реализации проверки. Весь мой подход неверен?

1 Ответ

0 голосов
/ 24 августа 2018

Вместо отображения диалогового окна на странице мастера обычно отображаются ошибки в верхней области мастера с использованием setErrorMessage или setError.

Обычно удобно проводить проверку каждый разданные на странице изменены.Для вашего примера страницы что-то вроде:

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);
  }
}

Это использует 'modify listener' в поле text1 и вызывает setErrorMessage и setPageComplete каждый раз, когда поле изменяется.

...