2013-05-14 36 views
0

添加一個通用的「所有」的價值我有一個通用的GXT3的ComboBox這對於枚舉顯示所有可用值:如何GXT組合框

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以顯示「All」這個特殊情況,但它不能按預期工作:組合包含預期的行,但它顯示的是空文本而不是「全部「,並且該行沒有正確的大小。

這裏是我的枚舉

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

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

通用ModelKeyProvider而我一般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); 
    } 
    } 
} 
+0

你有沒有找到解決方案(上GXT 2.2.5測試)? – 2015-04-28 06:53:03

回答

0

也許不是你正在尋找的解決方案,但我解決了這一點,但簡單地設置的的emptyText組合框爲「全部」。

0

嘗試SimpleComboBox

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; 
}