I have a WizardPage called PageOne with a text box, I want to print the data entered in the textBox of PageOne to be displayed in Page two.
I have tried saving the value in another object and passing that object to PageTwo object and they try displaying, I have tried sending pageOne object itself. But in both the case it prints out NULL. I believe it is printing out the default value i.e null is loaded while loading the page.
How do I handle such scenarios?
Code:
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();
}
}
Update
Changes made:
In Wizard Page:
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();
}
}
UI Part:
Page Two
One way is to pass the same object to both pages when you construct them.
So your Wizard
might do:
@Override
public void addPages()
{
DataTransferObject dto = new DataTransferObject();
addPage(new PageOne(dto));
addPage(new PageTwo(dto);
}
And the wizard pages would look like:
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
is some class that you write containing the data you want to share. PageOne
should set values in to the object so that PageTwo
can retrieve them.
PageTwo
should wait for the setVisible
call to access the data:
@Override
public void setVisible(final boolean visible)
{
if (visible)
{
// TODO access data and update the controls which show the data
}
}
super.setVisible(visible);
}
The setVisible
code must update the controls which have already been created. So for a Text
control you would call setText
and so on.