如何使用Jface对话框验证文本?

时间:2014-03-06 12:27:52

标签: java validation text dialog jface

我使用以下代码创建了一个带有两个输入字段的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

1 个答案:

答案 0 :(得分:3)

您可以使用Text.addModifyListener添加ModifyListener,每次更改文本时都会调用Text.addVerifyListener。您还可以使用VerifyListener添加TitleAreaDialog,这实际上可以阻止输入文字。

对于setMessage,您可以致电setErrorMessageOK在标题区域中显示消息。

您可以使用以下方法禁用对话框中的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}}