Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ViewerSupport ComboViewer,如何绑定列表?_Java_Data Binding_Combobox_Swt_Jface - Fatal编程技术网

Java ViewerSupport ComboViewer,如何绑定列表?

Java ViewerSupport ComboViewer,如何绑定列表?,java,data-binding,combobox,swt,jface,Java,Data Binding,Combobox,Swt,Jface,这个问题看起来很简单,但我不知道怎么做。 让我们假设以下简短片段: List<Long> model = new ArrayList<Long>(); model.add(Long.valueOf(1d)); model.add(Long.valueOf(2d)); model.add(Long.valueOf(3d)); WritableList list = new WritableList(model, Long.class); comboViewer = new

这个问题看起来很简单,但我不知道怎么做。 让我们假设以下简短片段:

List<Long> model = new ArrayList<Long>();
model.add(Long.valueOf(1d));
model.add(Long.valueOf(2d));
model.add(Long.valueOf(3d));
WritableList list = new WritableList(model, Long.class);

comboViewer = new ComboViewer(composite, SWT.READ_ONLY);
comboViewer.setContentProvider(new ObservableListContentProvider());
ViewerSupport.bind(comboViewer, list, ???);
我必须在ViewerSupport.bind中插入什么作为第三个参数,才能在ComboViewer中显示数字


通常必须有BeanProperties.valuesnew String[]{name}之类的内容,但我希望使用Long的toString getter。

您可以通过以下方式绑定ComboViewer:

import org.eclipse.swt.widgets.Combo;

/*
 * model - your model object
 * modelAttrName - List<Long> attribute name, within your model
 * toModel, fromModel - update value strategies. can be jsut new UpdateValueStrategy() in 
 * the beginning
*/
public static Binding bindCombo(DataBindingContext bindingContext, Object model, String modelAttrName, UpdateValueStrategy toModel, UpdateValueStrategy fromModel) {

Combo combo = comboViewer.getCombo();

return dataBindingContext.bindValue(WidgetProperties.selection().observe(combo),
    BeansObservables.observeValue(model, modelAttrName), toModel, fromModel);

}

作为modelAttrName,我必须提供什么?我想这就是问题所在,Long.class的属性就是toString方法。当然,我可以将Long子类化,并提供一个字符串getter和设置属性名,但我认为这种开销非常大。
class MyModel {

private List<Long> longs;

// provide getters and setters for logs class and fire property change events, using property change support

}
MyModel model = new MyModel();
bindCombo(new DataBindingContext(), model, "longs", new UpdateValueStrategy(), new UpdateValueStrategy());