SWT Widgets проблемы с привязкой - PullRequest
0 голосов
/ 04 мая 2019

Я работаю над приложением Eclipse RCP, мне нужно создать еще один диалог, где мне нужно работать с привязкой данных. С TextFields хорошо работает привязка. У меня проблема с двумя виджетами SWT - Combo, Spinner. В Spinner будут номера, куда я тоже могу написать. Spinner использует только значения из Array of Strings.

Для привязки я использую следующий код:

private void doBinding(MyPartComposite comp) {
    /* code for spinner */
    IObservableValue model = PojoProperties.value(MyPart.class, "age").observe(comp.result); //$NON-NLS-1$
    ISWTObservableValue target = WidgetProperties.text(SWT.Modify).observe(comp.ageSpinner);
    UpdateValueStrategy targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT);
    this.dataBindingContext.bindValue(target, model, targetToModel, null);

    /* code for combo */
    model = PojoProperties.value(MyPart.class, "gender").observe(comp.result); //$NON-NLS-1$
    target = WidgetProperties.text(SWT.Modify).observe(comp.genderCombo);
    targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT);
    this.dataBindingContext.bindValue(target, model, targetToModel, null);

}

Ответы [ 3 ]

0 голосов
/ 05 мая 2019

Здесь вы можете увидеть код моего счетчика и комбо, в счетчике должна быть возможность писать текст вручную. Комбо не имеет такой возможности. Спасибо за помощь.

    Spinner ageSpinner = new Spinner(myGroup, SWT.BORDER);
    ageSpinner.setMinimum(1);
    ageSpinner.setMaximum(100);
    GriData gd = new GridData();
    gd.horizontalAlignment = SWT.FILL;
    ageSpinner.setLayoutData(gd);

    ComboViewer genderCombo = new ComboViewer(myGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
    gd = new GridData();
    gd.horizontalSpan = 2;
    gd.horizontalIndent = 10;
    gd.horizontalAlignment = SWT.FILL;
    gd.grabExcessHorizontalSpace = true;
    genderCombo.getControl().setLayoutData(gd);
    genderCombo.setContentProvider(ArrayContentProvider.getInstance());
    genderCombo.setInput(this.genders.toArray(new String[0]));
0 голосов
/ 06 мая 2019

Спасибо, это что за возможность центрировать текст в Spinner?

0 голосов
/ 05 мая 2019

Spinner не имеет свойства текста, вместо этого свяжите его с его выбором.Этот пример ниже работает для меня, я предполагаю, что свойство age является целым числом, а пол - String.

IObservableValue observeSelectionAgeSpinnerObserveWidget = WidgetProperties.selection().observe(ageSpinner);
IObservableValue ageResultObserveValue = PojoProperties.value("age").observe(comp.result);
dataBindingContext.bindValue(observeSelectionAgeSpinnerObserveWidget, ageResultObserveValue, null, null);
//
IObservableValue observeSingleSelectionGenderCombo = ViewerProperties.singleSelection().observe(genderCombo);
IObservableValue genderResultObserveValue = PojoProperties.value("gender").observe(comp.result);
dataBindingContext.bindValue(observeSingleSelectionGenderCombo, genderResultObserveValue, null, null);
...