Как добавить общее значение All в GXT ComboBox

У меня есть общий GXT3 ComboBox, который отображает все доступные значения для перечислений:

public static <T extends Enum<T>> ComboBox<T> buildEnumCombo(Class<T> t){

  ListStore<T> listStore=new ListStore<T>(new EnumModelKeyProvider<T>());

  for(T e:t.getEnumConstants()){
    listStore.add(e);
  }

  ComboBox<T> combo= new ComboBox<T>(listStore, new EnumLabelProvider<T>());
  combo.setTriggerAction(ComboBoxCell.TriggerAction.ALL);

  return combo;
}

Это комбо работает нормально.

Что мне нужно: я хотел бы иметь возможность добавить значение "Все".

Я попытался добавить «null» в хранилище и настроить LabelProvider для отображения «Все» для этого конкретного случая, но это не работает должным образом: комбинация содержит ожидаемую строку, но отображает пустой текст вместо «Все» и строка имеет неправильный размер.

Вот мой общий ModelKeyProvider для перечислений

public class EnumModelKeyProvider<T extends Enum> implements ModelKeyProvider<T> {

@Override
public String getKey(T item) {
  if(item==null){
    return null;
  }else{
    return item.name();
  }
}

И мой общий LabelProvider :

public class EnumLabelProvider<T extends Enum<T>> implements LabelProvider<T> {

  @Override
  public String getLabel(T item) {
    if(item==null){
      return "All";
    }else{
      return I18nEnum.i18nEnum(item);
    }
  }
}

person Arnaud Denoyelle    schedule 14.05.2013    source источник
comment
Вы нашли решение?   -  person Mike Voitenko    schedule 28.04.2015


Ответы (2)


Возможно, это не то решение, которое вы ищете, но я решил это, просто установив для emptyText ComboBox значение «Все».

person José    schedule 21.05.2013

Попробуйте SimpleComboBox (проверено на gxt 2.2.5)

private SimpleComboBox<String> createSimpleComboBox(){      
        SimpleComboBox<String> combo = new SimpleComboBox<String>();

        combo.setTypeAhead(true);
        combo.setTriggerAction(TriggerAction.ALL);
        combo.setEditable(editable);
        combo.setForceSelection(true);
        combo.setTemplate(getComboTemplate());
        return combo;
}

private native String getComboTemplate() /*-{
return  [
'<tpl for=".">',
'<tpl if="value == \'\'">',
'<div class="x-combo-list-item" qtip="N/A" qtitle=""></BR></div>',
'</tpl>',
'<tpl if="value != \'\'">',
'<div class="x-combo-list-item" qtip="{value}" qtitle="">{value}</div>',
  '</tpl>',
'</tpl>'
].join("");
}-*/;

public SimpleComboBox<String> buildComboBox(){
            SimpleComboBox<String> combo = createSimpleComboBox();

            combo.add("");
            List<String> list = new ArrayList<String>();
            for(T e:t.getEnumConstants()){
                list.add(e.name());
            }
            combo.add(list);
            return combo;
}
person Andrzej Jozwik    schedule 22.08.2013