如何避免在后退然后单击下一步时添加小部件? [英] How to avoid widgets being added while moving back and on then clicking Next?
问题描述
我创建了一个向导。
它有 3
页-
@Override
public void addPages(){
super.addPages();
addPage(firstPage);
addPage(secondPage);
addPage(thirdPage);
}
对于第一页,我有一个简单的标签
带有输入
字段以收集用户输入的值-
@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));
标签=新标签(页面,SWT.NONE);
label.setText(接口ID:);
interfaceId = new Text(page,SWT.BORDER);
GridData interfaceIdGridData =新的GridData(GridData.FILL_HORIZONTAL);
interfaceId.setLayoutData(interfaceIdGridData);
}
当用户单击上面向导页面上显示的下一步按钮时,将调用一个从内部系统收集一些详细信息的调用 getNextPage
进入同一向导页面。
然后用户进入向导页面 2
以及在 step1
中获取的详细信息在向导页面2中显示在这里
公共类InterfaceDetailsPage扩展了WizardPage {
private复合顶部;
private ScrolledComposite scrolledComposite;
个私人复合页面;
私人标签responseCode;
私人标签回复消息;
私人标签interfaceName;
private Label sourceSystem;
私人标签targetSystem;
私人标签domainName;
私人标签serviceName;
private SelectedServerNode iServer;
private volatile boolean activityCancelled;
私人CreateSkeletonResponseModel模型;
private CreateSkeletonDisplayResultModel resultModel;
受保护的InterfaceDetailsPage(SelectedServerNode iServer){
super( InterfaceDetailsPage);
this.iServer = iServer;
setTitle( Component Details);
setMessage(请求的接口详细信息如下:);
}
@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);
页面=新的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;
//处理标签响应代码及其值
Label responseCodeLbl = new Label(page,SWT.NONE);
// gridData = new GridData(GridData.FILL_HORIZONTAL);
//responseCodeLbl.setLayoutData(gridData);
responseCodeLbl.setText( Response Code:);
responseCode =新标签(页面,SWT.NONE);
gridData =新的GridData(GridData.FILL_HORIZONTAL);
responseCode.setLayoutData(gridData);
//处理标签响应消息及其值
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 =新的GridData(GridData.FILL_HORIZONTAL);
responseMsg.setLayoutData(gridData);
}
@Override
public void setVisible(布尔型可见){
if(可见){
InterfacePage interfacePage =(InterfacePage)(getWizard()。getPage( InterfacePage));;
ModelObject模型= interfacePage.getModelObject();
GridData gridData = null;
//处理标签接口名称及其值
Label interfaceNameLbl = new Label(page,SWT.NONE);
// gridData = new GridData(GridData.FILL_HORIZONTAL);
//interfaceNameLbl.setLayoutData(gridData);
interfaceNameLbl.setText(接口ID:);
interfaceName = new Label(page,SWT.NONE);
gridData =新的GridData(GridData.FILL_HORIZONTAL);
interfaceName.setLayoutData(gridData);
//处理标签源系统及其值
Label sourceSystemLbl = new Label(page,SWT.NONE);
// gridData = new GridData(GridData.FILL_HORIZONTAL);
//sourceSystemLbl.setLayoutData(gridData);
sourceSystemLbl.setText( Source System:);
sourceSystem =新标签(页面,SWT.NONE);
gridData =新的GridData(GridData.FILL_HORIZONTAL);
sourceSystem.setLayoutData(gridData);
//处理标签目标系统及其值
Label targetSystemLbl = new Label(page,SWT.NONE);
// gridData = new GridData(GridData.FILL_HORIZONTAL);
//targetSystemLbl.setLayoutData(gridData);
targetSystemLbl.setText( Target System:);
targetSystem =新标签(页面,SWT.NONE);
gridData =新的GridData(GridData.FILL_HORIZONTAL);
targetSystem.setLayoutData(gridData);
//处理标签域名及其值
Label domainNameLbl = new Label(page,SWT.NONE);
// gridData = new GridData(GridData.FILL_HORIZONTAL);
//domainNameLbl.setLayoutData(gridData);
domainNameLbl.setText(域名:);
domainName =新标签(页面,SWT.NONE);
gridData =新的GridData(GridData.FILL_HORIZONTAL);
domainName.setLayoutData(gridData);
//处理标签服务名称及其值
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 =新的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(可见);
} ...
显示的最后5个标签是在 setVisible
方法内部生成的
如果现在我通过按返回
按钮后退,然后单击下一步
,我会看到新的标签被添加到前一行之下,因此显示两次。如何防止这种行为?
在 setVisible
中创建控件是错误的。您只应使用页面的 createControl
方法创建控件。
setVisible
方法应仅在 createControls $创建的控件中设置值c $ c>
如果某些控件未总是显示,则在createControls中创建它们,并调用 setVisible(false)
到不显示它们。
如果刚刚显示了很多变量值,请使用Table或TableViewer并将其内容设置为setVisible。
最后,如果确实需要,您可以在 setVisible
中创建东西,但是您必须记住您已经完成了此操作,并且在第二次调用setVisible时不再这样做。 / p>
I have created a Wizard.
it has 3
pages-
@Override
public void addPages() {
super.addPages();
addPage(firstPage);
addPage(secondPage);
addPage(thirdPage);
}
For the first page, I have a simple label
with a input
field to collect user entered value-
@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);
}
When the user clicks on the Next button shown on the above wizard page, there is a call to collect some details from external system within getNextPage
of the same wizard page.
The user then lands on wizard page 2
and the details which were fetched in step1
are displayed here in Wizard Page 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);
} ...
As seen the last 5 labels displayed were generated inside the setVisible
method
If now I move back by pressing the Back
button and then click Next
, I see the new labels are added under the previous rows and thus displayed twice. How can I prevent this behavior?
Creating controls in setVisible
is wrong. You should only create controls in the page's createControl
method.
The setVisible
method should only set values in the controls created by createControls
If some controls are not always shown create them in createControls and call setVisible(false)
to not display them.
If there are many variable values which are just displayed use a Table or TableViewer and set the contents in setVisible.
Finally if you really have to you can create things in setVisible
but you will have to remember you have done this and not do it again on the second call to setVisible.
这篇关于如何避免在后退然后单击下一步时添加小部件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!