使用Jface在文本字段中标记电话号码

时间:2013-01-17 02:05:17

标签: jface

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

我创建了Model as

class A{
    String phoneNo;
}

Jface数据绑定:

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

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

2 个答案:

答案 0 :(得分:0)

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

可能有某种方法可以将字符串值的“部分”绑定到窗口小部件,也许可以通过getter方法,但是对于那种等待,让更多知识渊博的人为您提供答案。

答案 1 :(得分:0)

以下是可以修改以与您的案例一起使用的示例代码。 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);
    }

  }