문제

i created a Dialog with two input fields with the following Code.

 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;
  }
} 

Is there a way to validate the ccidtext? If the user type more then 7 chars, he must get a notification and should not be able to continue the dialog. I read so lot at the internet but can`t find a solution for this problem.

Thank u so much for your help.

JonasInt

도움이 되었습니까?

해결책

You can use Text.addModifyListener to add a ModifyListener which will be called each time the text is changed. You can also use Text.addVerifyListener to add VerifyListener which can actually prevent text being entered.

For TitleAreaDialog you can call setMessage or setErrorMessage to display a message in the title area.

You can disable the OK button on the dialog using:

getButton(IDialogConstants.OK_ID).setEnabled(false);

Note: getButton(xxx) can return null if you call it too early in the dialog construction. Buttons are created during the createContents method after the createDialogArea method has been called.

So you can access the buttons by overriding createContents like this:

@Override
protected Control createContents(final Composite parent)
{
  Control control = super.createContents(parent);

  // TODO access buttons here

  return control;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top