使用Jface在文本字段中选择电话号码



我被困在其中一个问题上。假设我有一个电话号码字段010-9999-9999,这个数字应该分成3个文本字段。我试图这样做,但我只得到前缀数字即010在所有三个文本字段。我正在使用jface数据绑定。

我创建模型为

class A{
    String phoneNo;
}

Jface Databinding:

IObservableValue ssn1TextTextObserveWidget = SWTObservables.observeText(text_ph11, SWT.Modify);
IObservableValue ssn2TextTextObserveWidget = SWTObservables.observeText(text_ph2, SWT.Modify);
IObservableValue ssn2TextTextObserveWidget1 = SWTObservables.observeText(text_ph3, SWT.Modify);
IObservableValue simpleTableViewerSSN1ObserveDetailValue = BeansObservables.observeDetailValue(simpleTableViewerSelectionObserveSelection_employee, "phoneNo", String.class);
IObservableValue simpleTableViewerSSN2ObserveDetailValue = BeansObservables.observeDetailValue(simpleTableViewerSelectionObserveSelection_employee, "phoneNo", String.class);
IObservableValue simpleTableViewerSSN2ObserveDetailValue = BeansObservables.observeDetailValue(simpleTableViewerSelectionObserveSelection_employee, "phoneNo", String.class);

数据绑定

bindingContext.bindValue(simpleTableViewerSSN1ObserveDetailValue, ssn1TextTextObserveWidget, null, null);
bindingContext.bindValue(simpleTableViewerSSN2ObserveDetailValue, ssn2TextTextObserveWidget, null, null);
bindingContext.bindValue(simpleTableViewerSSN2ObserveDetailValue, ssn2TextTextObserveWidget1, null, null);

当我尝试做这个值时,只有前缀填充在所有三个字段中,即010-010-010。请帮我解决这个问题。

如果希望将电话号码划分为三个不同的小部件,则可能需要将电话号码保存在三个不同的属性中,每个属性分配电话号码的不同部分。

也许有一些方法可以将字符串值的"一部分"绑定到一个小部件上,也许是通过getter方法,但是要等待,让在这方面更有知识的人给你一个答案。

下面是可以根据您的情况修改的示例代码。IConverterUpdateValueStrategy一起用于修改将被设置/从目标文本字段获取模型的值。

//GUI class
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(3, false));
    Label lbl = new Label(shell, SWT.NONE);
    lbl.setText("Name");
    final Text firstName = new Text(shell, SWT.BORDER);
    final Text lastName = new Text(shell, SWT.BORDER);
    final Name name = new Name();
    SWTObservables.getRealm(display).exec(new Runnable() {
      @Override
      public void run() {
        // TODO Auto-generated method stub
        Realm realm = SWTObservables.getRealm(display);
        DataBindingContext cxt = new DataBindingContext(realm);
        ISWTObservableValue firstNameObservable = SWTObservables.observeText(firstName, new int[] { SWT.Modify });
        ISWTObservableValue lastNameObservable = SWTObservables.observeText(lastName, new int[] { SWT.Modify });
        final IObservableValue nameObservable = BeansObservables.observeValue(realm, name, "name");
        UpdateValueStrategy firstNameTxtToName = new UpdateValueStrategy();
        firstNameTxtToName.setConverter(new IConverter() {
          @Override
          public Object getToType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object getFromType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object convert(Object fromObject) {
            String val = fromObject.toString();
            Object beanVal = nameObservable.getValue();
            if (beanVal != null) {
              String beanString = beanVal.toString();
              int i = beanString.indexOf(',');
              if (i != -1) {
                return val + beanString.substring(i);
              }
            }
            return val;
          }
        });
        UpdateValueStrategy nameToFirstName = new UpdateValueStrategy();
        nameToFirstName.setConverter(new IConverter() {
          @Override
          public Object getToType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object getFromType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object convert(Object fromObject) {
            if (fromObject != null) {
              Object objVal = nameObservable.getValue();
              if (objVal != null) {
                String val = objVal.toString();
                int i = val.indexOf(',');
                if (i != -1) {
                  return val.substring(0, i);
                } else {
                  return val;
                }
              }
            }
            return "";
          }
        });
        UpdateValueStrategy lastNameTxtToName = new UpdateValueStrategy();
        lastNameTxtToName.setConverter(new IConverter() {
          @Override
          public Object getToType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object getFromType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object convert(Object fromObject) {
            String val = fromObject.toString();
            Object beanVal = nameObservable.getValue();
            if (beanVal != null) {
              String beanString = beanVal.toString();
              int i = beanString.indexOf(',');
              String fName = beanString;
              if (i != -1) {
                fName = beanString.substring(0, i + 1);
              } else {
                fName = fName + ",";
              }
              val = fName + val;
            }
            return val;
          }
        });
        UpdateValueStrategy nameToLastName = new UpdateValueStrategy();
        nameToLastName.setConverter(new IConverter() {
          @Override
          public Object getToType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object getFromType() {
            // TODO Auto-generated method stub
            return String.class;
          }
          @Override
          public Object convert(Object fromObject) {
            if (fromObject != null) {
              String val = fromObject.toString();
              int i = val.indexOf(',');
              if (i != -1) {
                return val.substring(i + 1);
              }
            }
            return "";
          }
        });
        cxt.bindValue(firstNameObservable, nameObservable, firstNameTxtToName, nameToFirstName);
        cxt.bindValue(lastNameObservable, nameObservable, lastNameTxtToName, nameToLastName);
      }
    });
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();


//POJO

public class Name {
  private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
  public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
    changeSupport.addPropertyChangeListener(propertyName, listener);
  }
  public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
    changeSupport.removePropertyChangeListener(propertyName, listener);
  }
  public void addPropertyChangeListener(PropertyChangeListener listener) {
    changeSupport.addPropertyChangeListener(listener);
  }
  public void removePropertyChangeListener(PropertyChangeListener listener) {
    changeSupport.removePropertyChangeListener(listener);
  }
  public void firePropertyChangeEvent(PropertyChangeEvent evt) {
    changeSupport.firePropertyChange(evt);
  }
    String name;

    /**
     * @return the name
     */
    public String getName() {
      return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
      this.name = name;
      System.out.println(name);
    }
  }

最新更新