public class EnumListBoxEditor<T extends Enum<T>> implements IsWidget, LeafValueEditor<T> { private ListBox listBox; private Class<T> enumType; public EnumListBoxEditor(Class<T> tClass) { listBox = new ListBox(); this.enumType = tClass; for(T e : enumType.getEnumConstants()) { listBox.addItem(e.name()); } } @Override public Widget asWidget() { return listBox; } @Override public void setValue(T language) { listBox.setSelectedIndex(language.ordinal()); } @Override public T getValue() { int index = listBox.getSelectedIndex(); T result = null; for (T e : enumType.getEnumConstants()) { String itemName = listBox.getValue(index); if (e.name().equals(itemName)) { result = e; } } return result; } public void setEnabled(boolean isEnabled){ listBox.setEnabled(isEnabled); } }
Thus this approach is acceptable the best way to use ListBox with any Enum or bean that implement HasLabel interface is ValueListBox component e.g.:
@UiField(provided = true) ValueListBox<TeamDTO> team;
this.team = new ValueListBox<TeamDTO>(new HasLabelRenderer<TeamDTO>(), new IdentityProvidesKey<TeamDTO>());
public class HasLabelRenderer<T extends HasLabel> extends AbstractRenderer<T>{ @Override public String render(HasLabel object) { return object == null ? "" : object.getLabel(); } }
public class IdentityProvidesKey<T extends Identity> implements ProvidesKey<T> { @Override public Object getKey(T item) { return item == null ? null: item.getId(); } }
No comments:
Post a Comment