Java 如何避免在返回并单击“下一步”时添加小部件?
我已经创建了一个向导 它有3页- 对于第一页,我有一个带有输入字段的简单标签,用于收集用户输入的值-Java 如何避免在返回并单击“下一步”时添加小部件?,java,eclipse-plugin,swt,Java,Eclipse Plugin,Swt,我已经创建了一个向导 它有3页- 对于第一页,我有一个带有输入字段的简单标签,用于收集用户输入的值- @Override public void createControl(Composite parent) { Composite page = new Composite(parent, SWT.NONE); setControl(page); setPageComplete(false); // page.se
@Override
public void createControl(Composite parent) {
Composite page = new Composite(parent, SWT.NONE);
setControl(page);
setPageComplete(false);
// page.setLayout(new GridLayout(2, false));
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
gridLayout.makeColumnsEqualWidth = false;
page.setLayout(gridLayout);
page.setLayoutData(new GridData(GridData.FILL_BOTH));
Label label = new Label(page, SWT.NONE);
label.setText("Interface Id : ");
interfaceId = new Text(page, SWT.BORDER);
GridData interfaceIdGridData = new GridData(GridData.FILL_HORIZONTAL);
interfaceId.setLayoutData(interfaceIdGridData);
}
当用户单击上面向导页面上显示的“下一步”按钮时,会有一个从同一向导页面的getNextPage中的外部系统收集一些详细信息的调用
然后,用户登录到向导第2页,步骤1中获取的详细信息显示在向导第2页的此处-
public class InterfaceDetailsPage extends WizardPage {
private Composite top;
private ScrolledComposite scrolledComposite;
private Composite page;
private Label responseCode;
private Label responseMsg;
private Label interfaceName;
private Label sourceSystem;
private Label targetSystem;
private Label domainName;
private Label serviceName;
private SelectedServerNode iServer;
private volatile boolean activityCancelled;
private CreateSkeletonResponseModel model;
private CreateSkeletonDisplayResultModel resultModel;
protected InterfaceDetailsPage(SelectedServerNode iServer) {
super("InterfaceDetailsPage");
this.iServer = iServer;
setTitle("Component Details");
setMessage("The requested Interface details are shown below : ");
}
@Override
public void createControl(Composite parent) {
top = new Composite(parent, SWT.NONE);
top.setLayout(new FillLayout());
setControl(top);
setPageComplete(false);
scrolledComposite = new ScrolledComposite(top, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
page = new Composite(scrolledComposite, SWT.NONE);
//setControl(page);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
//gridLayout.makeColumnsEqualWidth = true;
gridLayout.makeColumnsEqualWidth = false;
page.setLayout(gridLayout);
page.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
scrolledComposite.setContent(page);
scrolledComposite.setSize(page.computeSize(SWT.DEFAULT, SWT.DEFAULT));
GridData gridData = null;
// Deals with the label response code and its value
Label responseCodeLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//responseCodeLbl.setLayoutData(gridData);
responseCodeLbl.setText("Response Code : ");
responseCode = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
responseCode.setLayoutData(gridData);
// Deals with the label response message and its value
Label responseMsgLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//responseMsgLbl.setLayoutData(gridData);
responseMsgLbl.setText("Response Message : ");
responseMsg = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
responseMsg.setLayoutData(gridData);
}
@Override
public void setVisible(boolean visible) {
if (visible) {
InterfacePage interfacePage = (InterfacePage) (getWizard().getPage("InterfacePage"));
ModelObject model = interfacePage.getModelObject();
GridData gridData = null;
// Deals with the label interface name and its value
Label interfaceNameLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//interfaceNameLbl.setLayoutData(gridData);
interfaceNameLbl.setText("Interface Id : ");
interfaceName = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
interfaceName.setLayoutData(gridData);
// Deals with the label source system and its value
Label sourceSystemLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//sourceSystemLbl.setLayoutData(gridData);
sourceSystemLbl.setText("Source System : ");
sourceSystem = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
sourceSystem.setLayoutData(gridData);
// Deals with the label target system and its value
Label targetSystemLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//targetSystemLbl.setLayoutData(gridData);
targetSystemLbl.setText("Target System : ");
targetSystem = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
targetSystem.setLayoutData(gridData);
// Deals with the label domain name and its value
Label domainNameLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//domainNameLbl.setLayoutData(gridData);
domainNameLbl.setText("Domain Name : ");
domainName = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
domainName.setLayoutData(gridData);
// Deals with the label service name and its value
Label serviceNameLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//serviceNameLbl.setLayoutData(gridData);
serviceNameLbl.setText("Service Name : ");
serviceName = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
serviceName.setLayoutData(gridData);
interfaceName.setText(null != model.getInterfaceName() ? model.getInterfaceName() : "");
// setTitle(model.getInterfaceID1() +" details");
sourceSystem.setText(null != model.getSourceSystem() ? model.getSourceSystem() : "");
targetSystem.setText(null != model.getTargetSystem() ? model.getTargetSystem() : "");
domainName.setText(null != model.getDomainName() ? model.getDomainName() : "");
serviceName.setText(null != model.getServiceName() ? model.getServiceName() : "");
responseCode.setText(String.valueOf(model.getResponseCode()));
responseMsg.setText(null != model.getResponseMessage() ? model.getResponseMessage() : "");
page.layout();
scrolledComposite.layout(true, true);
scrolledComposite.setMinSize(page.computeSize(SWT.DEFAULT, SWT.DEFAULT));
top.layout();
setPageComplete(true);
}
super.setVisible(visible);
} ...
如图所示,显示的最后5个标签是在setVisible方法中生成的
如果现在通过按“上一步”按钮向后移动,然后单击“下一步”,我会看到新标签添加到前几行下,因此显示两次。如何防止这种行为
在setVisible中创建控件是错误的。您应该只在页面的createControl方法中创建控件
setVisible方法应仅在createControls创建的控件中设置值
如果某些控件不总是显示,请在createControls中创建它们,并调用setVisiblefalse以不显示它们
如果有许多刚刚显示的变量值,请使用表格或表格查看器并在setVisible中设置内容
最后,如果您确实需要,您可以在setVisible中创建内容,但您必须记住您已经这样做了,并且在第二次调用setVisible时不再这样做。对于上面的具有静态标签集的示例,我理解。但是,如果我有一个要显示的动态值列表,因此我无法预先知道需要生成多少行,那么我如何才能在创建控件中添加相同的行?在答案中添加了更多选项
public class InterfaceDetailsPage extends WizardPage {
private Composite top;
private ScrolledComposite scrolledComposite;
private Composite page;
private Label responseCode;
private Label responseMsg;
private Label interfaceName;
private Label sourceSystem;
private Label targetSystem;
private Label domainName;
private Label serviceName;
private SelectedServerNode iServer;
private volatile boolean activityCancelled;
private CreateSkeletonResponseModel model;
private CreateSkeletonDisplayResultModel resultModel;
protected InterfaceDetailsPage(SelectedServerNode iServer) {
super("InterfaceDetailsPage");
this.iServer = iServer;
setTitle("Component Details");
setMessage("The requested Interface details are shown below : ");
}
@Override
public void createControl(Composite parent) {
top = new Composite(parent, SWT.NONE);
top.setLayout(new FillLayout());
setControl(top);
setPageComplete(false);
scrolledComposite = new ScrolledComposite(top, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
page = new Composite(scrolledComposite, SWT.NONE);
//setControl(page);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
//gridLayout.makeColumnsEqualWidth = true;
gridLayout.makeColumnsEqualWidth = false;
page.setLayout(gridLayout);
page.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
scrolledComposite.setContent(page);
scrolledComposite.setSize(page.computeSize(SWT.DEFAULT, SWT.DEFAULT));
GridData gridData = null;
// Deals with the label response code and its value
Label responseCodeLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//responseCodeLbl.setLayoutData(gridData);
responseCodeLbl.setText("Response Code : ");
responseCode = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
responseCode.setLayoutData(gridData);
// Deals with the label response message and its value
Label responseMsgLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//responseMsgLbl.setLayoutData(gridData);
responseMsgLbl.setText("Response Message : ");
responseMsg = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
responseMsg.setLayoutData(gridData);
}
@Override
public void setVisible(boolean visible) {
if (visible) {
InterfacePage interfacePage = (InterfacePage) (getWizard().getPage("InterfacePage"));
ModelObject model = interfacePage.getModelObject();
GridData gridData = null;
// Deals with the label interface name and its value
Label interfaceNameLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//interfaceNameLbl.setLayoutData(gridData);
interfaceNameLbl.setText("Interface Id : ");
interfaceName = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
interfaceName.setLayoutData(gridData);
// Deals with the label source system and its value
Label sourceSystemLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//sourceSystemLbl.setLayoutData(gridData);
sourceSystemLbl.setText("Source System : ");
sourceSystem = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
sourceSystem.setLayoutData(gridData);
// Deals with the label target system and its value
Label targetSystemLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//targetSystemLbl.setLayoutData(gridData);
targetSystemLbl.setText("Target System : ");
targetSystem = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
targetSystem.setLayoutData(gridData);
// Deals with the label domain name and its value
Label domainNameLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//domainNameLbl.setLayoutData(gridData);
domainNameLbl.setText("Domain Name : ");
domainName = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
domainName.setLayoutData(gridData);
// Deals with the label service name and its value
Label serviceNameLbl = new Label(page, SWT.NONE);
//gridData = new GridData(GridData.FILL_HORIZONTAL);
//serviceNameLbl.setLayoutData(gridData);
serviceNameLbl.setText("Service Name : ");
serviceName = new Label(page, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
serviceName.setLayoutData(gridData);
interfaceName.setText(null != model.getInterfaceName() ? model.getInterfaceName() : "");
// setTitle(model.getInterfaceID1() +" details");
sourceSystem.setText(null != model.getSourceSystem() ? model.getSourceSystem() : "");
targetSystem.setText(null != model.getTargetSystem() ? model.getTargetSystem() : "");
domainName.setText(null != model.getDomainName() ? model.getDomainName() : "");
serviceName.setText(null != model.getServiceName() ? model.getServiceName() : "");
responseCode.setText(String.valueOf(model.getResponseCode()));
responseMsg.setText(null != model.getResponseMessage() ? model.getResponseMessage() : "");
page.layout();
scrolledComposite.layout(true, true);
scrolledComposite.setMinSize(page.computeSize(SWT.DEFAULT, SWT.DEFAULT));
top.layout();
setPageComplete(true);
}
super.setVisible(visible);
} ...