我有一个枚举SupplierCode
:
public enum SupplierCode
{
BG("British Gas"), CNG("Contract Natural Gas"), COR("Corona Energy");
private String value;
SupplierCode(String value)
{
if(value != "")
{
this.value = value;
}
}
// ... toString() and fromString() omitted for brevity
// for editor framework (?)
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
}
我使用ValueListBox
@UiField(provided = true)
ValueListBox<SupplierCode> supplierCode = new ValueListBox<SupplierCode>(new AbstractRenderer<SupplierCode>()
{
@Override
public String render(SupplierCode object)
{
return object == null ? "" : object.toString();
}
});
// in the constructor
public ContractEditor()
{
initWidget(uiBinder.createAndBindUi(this));
supplierCode.setAcceptableValues(Arrays.asList(SupplierCode.values()));
}
我必须在我的应用中多次编辑此类型,因此我想为此下拉列表创建一个名为SupplierCodeEditor
的编辑器:
public class SupplierCodeEditor extends Composite implements Editor<SupplierCode>
{
private static SupplierCodeEditorUiBinder uiBinder = GWT.create(SupplierCodeEditorUiBinder.class);
interface SupplierCodeEditorUiBinder extends UiBinder<Widget, SupplierCodeEditor>
{
}
@UiField(provided = true)
ValueListBox<SupplierCode> value = new ValueListBox<SupplierCode>(new AbstractRenderer<SupplierCode>()
{
@Override
public String render(SupplierCode object)
{
return object == null ? "" : object.toString();
}
});
public SupplierCodeEditor()
{
initWidget(uiBinder.createAndBindUi(this));
value.setAcceptableValues(Arrays.asList(SupplierCode.values()));
}
}
但是,当我使用它时,虽然它使用选项呈现列表,但它不会从列表中选择实际值。我认为getValue()和setValue()方法可以工作,但似乎没有。
有没有人知道如何将它放在一个编辑器文件中?那么我不必重复渲染器的代码并在每个我想使用它的地方调用setAcceptableValues()。
答案 0 :(得分:2)
使用LeafValueEditor<SupplierCode>
:
public class SupplierEditor extends Composite implements LeafValueEditor<SupplierCode> {
interface SupplierEditorUiBinder extends UiBinder<Widget, SupplierEditor> {
}
private static SupplierEditorUiBinder uiBinder = GWT.create(SupplierEditorUiBinder.class);
@UiField(provided = true)
ValueListBox<SupplierCode> codes;
public SupplierEditor() {
codes = new ValueListBox<>(new AbstractRenderer<SupplierCode>() {
@Override
public String render(SupplierCode object) {
return object == null ? "" : object.toString();
}
});
initWidget(uiBinder.createAndBindUi(this));
codes.setAcceptableValues(Arrays.asList(SupplierCode.values()));
}
@Override
public SupplierCode getValue() {
return codes.getValue();
}
@Override
public void setValue(SupplierCode value) {
codes.setValue(value);
}
}
这样,您的窗口小部件可以轻松插入Editor
层次结构中。
并且您不需要SupplierCode
枚举中的get / set方法。
答案 1 :(得分:1)
您必须:
对您的孩子使用@Editor.Path("")
ValueListBox
制作SupplierCodeEditor
工具LeafValueEditor<SupplierCode>
,将getValue
和setValue
委托给ValueListBox
制作SupplierCodeEditor
工具IsEditor<LeafValueEditor<SupplierCode
&gt;,从您自己的ValueListBox
返回asEditor()
asEditor()
。
getValue
和setValue
。