SWT-Как перенести данные с одной страницы на другую - PullRequest
0 голосов
/ 28 августа 2018

У меня есть WizardPage с именем PageOne с текстовым полем, я хочу напечатать данные, введенные в текстовое поле PageOne, для отображения на второй странице.

Я попытался сохранить значение в другом объекте и передать этот объект объекту PageTwo, и они пытаются отобразить, я попытался отправить сам объект PageOne. Но в обоих случаях он печатает NULL. Я считаю, что это распечатывает значение по умолчанию, т. Е. Null загружается при загрузке страницы.

Как мне справиться с такими сценариями?

Код:

PageOne:

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

PageTwo:

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

    public PageTwo(PageOne pageOne) {
        super("PageTwo ");
        this.pageOne=pageOne;
        setTitle("PageTwo ");
        setDescription("Fake Wizard: PageTwo");
    }

    public void setText(Text text){
        this.text2=text;
    }

    @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);
        String result="";

        if(pageOne.getText()!=null){
            result=pageOne.getText().toString();
        }

        label1.setText("Put a value here."+result);

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

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

Обновление

Изменения сделаны:

На странице мастера:

public void addPages() {
    super.addPages(); 
    DataTransferObject dto = new DataTransferObject();
    addPage(new PageOne(dto));
    addPage(new PageTwo(dto));
    addPage(new PageThree());
}

DataTransferObject

public class DataTransferObject {

    String data=null;

    public String getData(){
        return this.data;
    }

    public void setData(String data){
        this.data=data;
    }

}

PageOne:

public class PageOne extends WizardPage {
    private Text text1;
    private Composite container;
    private DataTransferObject dto;

    public Text getText(){
        return this.text1;
    }

    public PageOne(DataTransferObject dto) {
        super("PageOne ");
        setTitle("PageOne ");
        this.dto=dto;
        setDescription("Fake Wizard: PageOne");
    }

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

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

    @Override
    public IWizardPage getNextPage() {
        // TODO Auto-generated method stub
        System.out.println("Data is "+this.text1.getText().toString());
        dto.setData(this.text1.getText().toString());
        return super.getNextPage();
    }
}

PageTwo:

public class PageTwo extends WizardPage {
    private Text text1;
    private Composite container;
    private Text text2;
    PageOne pageOne;
    DataTransferObject dto; 

    public PageTwo(DataTransferObject dto) {
        super("PageTwo ");
        this.dto=dto;
        setTitle("PageTwo ");
        setDescription("Fake Wizard: PageTwo");
    }

    public void setText(Text text){
        this.text2=text;
    }

    @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);
        String result="";

        org.eclipse.swt.widgets.List single = new org.eclipse.swt.widgets.List(container, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
        if(!(dto.data==null)){
            single.add(dto.getData());
        }
        setControl(container);
        setPageComplete(true);
    }

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

Часть пользовательского интерфейса:

PageOne enter image description here

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

enter image description here

1 Ответ

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

Один из способов - передать один и тот же объект на обе страницы при их создании.

Так что ваш Wizard может сделать:

@Override
public void addPages()
{
  DataTransferObject dto = new DataTransferObject();

  addPage(new PageOne(dto));

  addPage(new PageTwo(dto);
}

И страницы мастера будут выглядеть так:

public class PageOne extends WizardPage {
    DataTransferObject dto;

    public PageOne(DataTransferObject dto) {
        super("PageOne");

        this.dto = dto;
    }
public class PageTwo extends WizardPage {
    DataTransferObject dto;

    public PageTwo(DataTransferObject dto) {
        super("PageTwo ");

        this.dto = dto;
    }

DataTransferObject - это некоторый класс, который вы пишете, содержащий данные, которыми вы хотите поделиться. PageOne должен установить значения для объекта, чтобы PageTwo мог получить их.

PageTwo должен дождаться вызова setVisible для доступа к данным:

 @Override
 public void setVisible(final boolean visible)
 {
   if (visible)
    {
      // TODO access data and update the controls which show the data
    }
 }

super.setVisible(visible);

} * * тысяча двадцать-один

Код setVisible должен обновлять элементы управления, которые уже были созданы. Так что для Text управления вы бы назвали setText и т. Д.

...