0

問題の1つで立ち往生しています。電話番号フィールドがあると010-9999-9999します。この番号は 3 つのテキスト フィールドに分割する必要があります。これを実行しようとしましたが、3 つのテキスト フィールドすべてにプレフィックス番号、つまり 010 しか表示されません。jface データバインディングを使用しています。

モデルを次のように作成しました

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

この値を実行しようとすると、3 つのフィールドすべて、つまり 010-010-010 にプレフィックスのみが入力されます。この問題を解決するために私を助けてください。

4

2 に答える 2

0

ケースで機能するように変更できるサンプルコードを次に示します。IConverterを使用しUpdateValueStrategyて、ターゲットテキストフィールドとの間でモデルを設定/取得する値を変更します。

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

  }
于 2013-01-28T18:52:40.167 に答える
0

電話番号を 3 つの異なるウィジェットに分割する場合は、電話番号を 3 つの異なる属性に保存し、それぞれに電話番号の異なる部分を割り当てる必要があります。

おそらくゲッターメソッドを介して、文字列値の「一部」をウィジェットにバインドする方法があるかもしれませんが、それは待って、この分野の知識が豊富な人に答えてもらいましょう。

于 2013-01-17T10:59:41.073 に答える