我创建了一个GXT(Pro)网格。其中一列包含一个可编辑的枚举。为了能够编辑这个枚举,我创建了一个非常简单的ComboBox<Enum>
:
public class EnumCombo<E extends Enum<E>> extends ComboBox<E> {
public EnumCombo(Class<E> clazz) {
//EnumModelKeyProvider and EnumLabelProvider are my custom classes and are trivial.
super(new ListStore<E>(new EnumModelKeyProvider<E>()), new EnumLabelProvider<E>());
for(E e : clazz.getEnumConstants()) {
getStore().add(e);
}
setTriggerAction(ComboBoxCell.TriggerAction.ALL); //This line is problematic
}
}
错误:在网格中,当我尝试在ComboBox中选择一个元素时,突出显示的元素不是我悬停的元素。
提示:如果我删除setTriggerAction(ComboBoxCell.TriggerAction.ALL);
(但我需要显示所有值),则不会发生这种情况。
提示:如果组合不在网格中,则不会发生这种情况。
我做错了吗?有解决方法吗?
编辑: EnumModelKeyProvider 的代码:
public class EnumModelKeyProvider<T extends Enum> implements ModelKeyProvider<T> {
@Override
public String getKey(T item) {
return item.name();
}
}
EnumModelKeyProvider 的代码:
public class EnumLabelProvider<T extends Enum<T>> implements LabelProvider<T> {
@Override
public String getLabel(T item) {
return EnumUtils.i18nEnum(item);
}
}
整个网格代码:
public class GridAuditLigne extends Grid<AuditLigne> {
@Inject
private GridAuditLigne(GridAuditLignePropertyAccess pa) {
super(new HasIdListStore<AuditLigne>(), new ColumnModel<AuditLigne>(buildColumnList(pa)));
getView().setForceFit(true);
GridEditing<AuditLigne> editing = new GridInlineEditing<AuditLigne>(this);
ColumnConfig<AuditLigne, AuditLigneStatut> colStatut = getColumnModel().getColumn(3);
editing.addEditor(colStatut, new ComboEnum<AuditLigneStatut>(AuditLigneStatut.class));
getStore().addSortInfo(new Store.StoreSortInfo<AuditLigne>(pa.controleContratLibelle(), SortDir.ASC));
}
public static List<ColumnConfig<AuditLigne, ?>> buildColumnList(GridAuditLignePropertyAccess props) {
List<ColumnConfig<AuditLigne, ?>> result = Lists.newArrayList();
result.add(Grids.hidden(new IdCol<AuditLigne>(props.id())));
result.add(new StringCol<AuditLigne>(props.controleContratLibelle(), "Contrôle"));
result.add(new StringCol<AuditLigne>(props.controleContratTexte(), "Description"));
result.add(new EnumCol<AuditLigne, AuditLigneStatut>(props.auditLigneStatut(), "Statut"));
return result;
}
public interface GridAuditLignePropertyAccess extends PropertyAccess<AuditLigne> {
ValueProvider<AuditLigne, Integer> id();
@Editor.Path("controleContrat.libelle")
ValueProvider<AuditLigne, String> controleContratLibelle();
@Editor.Path("controleContrat.texte")
ValueProvider<AuditLigne, String> controleContratTexte();
ValueProvider<AuditLigne, AuditLigneStatut> auditLigneStatut();
}
}