我使用以下代码创建了一个带有两个输入字段的Dialog。
public class CCIDDialog extends TitleAreaDialog {
private Text ccidText;
private Text descriptionText;
private String CCID;
private String description;
public CCIDDialog(Shell parentShell) {
super(parentShell);
}
public void create() {
super.create();
setTitle(_title);
setMessage("Bitte geben Sie die CCID "+firstchar+"xxxxxxx und eine Beschreibung ein (max. 7-stellig): ", IMessageProvider.INFORMATION); }
@Override
protected Control createDialogArea(Composite parent) {
Composite area = (Composite) super.createDialogArea(parent);
Composite container = new Composite(area, SWT.NONE);
container.setLayoutData(new GridData(GridData.FILL_BOTH));
GridLayout layout = new GridLayout(2, false);
container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
container.setLayout(layout);
createCCID(container);
createDescription(container);
return area;
}
private void createCCID(Composite container) {
Label lbtFirstName = new Label(container, SWT.NONE);
lbtFirstName.setText("CCID (ohne "+firstchar+"): ");
GridData dataCCID = new GridData();
dataCCID.grabExcessHorizontalSpace = true;
dataCCID.horizontalAlignment = GridData.FILL;
ccidText = new Text(container, SWT.BORDER);
ccidText.setLayoutData(dataCCID);
}
private void createDescription(Composite container) {
Label lbtLastName = new Label(container, SWT.NONE);
lbtLastName.setText("Beschreibung: ");
GridData dataDescription = new GridData();
dataDescription.grabExcessHorizontalSpace = true;
dataDescription.horizontalAlignment = GridData.FILL;
descriptionText = new Text(container, SWT.BORDER);
descriptionText.setLayoutData(dataDescription);
}
@Override
protected boolean isResizable() {
return true;
}
// save content of the Text fields because they get disposed
// as soon as the Dialog closes
private void saveInput() {
CCID = ccidText.getText();
description = descriptionText.getText();
}
@Override
protected void okPressed() {
saveInput();
super.okPressed();
}
public String getCCID() {
return CCID;
}
public String getDescription() {
return description;
}
}
有没有办法验证ccidtext? 如果用户键入超过7个字符,他必须收到通知,并且不能继续该对话框。我在互联网上看了很多,但找不到解决这个问题的方法。
非常感谢你的帮助。
JonasInt
答案 0 :(得分:3)
您可以使用Text.addModifyListener
添加ModifyListener
,每次更改文本时都会调用Text.addVerifyListener
。您还可以使用VerifyListener
添加TitleAreaDialog
,这实际上可以阻止输入文字。
对于setMessage
,您可以致电setErrorMessage
或OK
在标题区域中显示消息。
您可以使用以下方法禁用对话框中的getButton(IDialogConstants.OK_ID).setEnabled(false);
按钮:
getButton(xxx)
注意:null
如果您在对话框构造中过早地调用它,则可以返回createContents
。调用createDialogArea
方法后,在createContents
方法期间创建按钮。
因此,您可以通过覆盖@Override
protected Control createContents(final Composite parent)
{
Control control = super.createContents(parent);
// TODO access buttons here
return control;
}
来访问按钮:
{{1}}