java - 如何避免在向后移动然后单击下一步时添加小部件?
问题描述
我创建了一个向导。
它有3
页面-
@Override
public void addPages() {
super.addPages();
addPage(firstPage);
addPage(secondPage);
addPage(thirdPage);
}
对于第一页,我有一个简单label
的input
字段来收集用户输入的值-
@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
,获取的详细信息step1
显示在向导页面 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
方法内部生成的
如果现在我通过按下Back
按钮向后移动,然后单击Next
,我会看到新标签被添加到之前的行下,因此显示了两次。如何防止这种行为?
解决方案
在其中创建控件setVisible
是错误的。createControl
您应该只在页面的方法中创建控件。
该setVisible
方法应该只在由创建的控件中设置值createControls
如果某些控件并不总是显示,请在 createControls 中创建它们并调用setVisible(false)
不显示它们。
如果有很多变量值刚刚显示,请使用 Table 或 TableViewer 并在 setVisible 中设置内容。
最后,如果你真的必须这样做,你可以在其中创建东西,setVisible
但你必须记住你已经这样做了,并且在第二次调用 setVisible 时不要再这样做了。
推荐阅读
- apache-flink - apache flink operator 和 keyed state 如何与并行实例一起工作?
- javascript - 如何在 html 表格中启用可点击的新添加行?
- git - 为什么我总是收到错误“推送到源/主服务器被拒绝”?
- django - 检查空字段的验证器
- javascript - 在锚元素上反应传递事件和参数
- javascript - Javascript将对象添加到数组
- android - 在我的代码中未使用时解组错误
- c# - 具有 Vector2Int 类型键的 JsonConvert 字典
- java - 使用 MySQL DB 的 spring boot 批处理始终生成主键为 0
- node.js - 实时客户端1到服务器到客户端2通信