[英]Populate ComboBox with HashMap?
我正在尝试使用信息哈希图填充vaadin7的组合框。 我创建了一个返回HashMap的类,当我获得返回值时,我对每个返回值使用HashMap来填充此组合框,但确实仅显示数字,而不显示hashmap的键和值。
我正在尝试这个。
/** states of brasil class */
public class EstadosBrasil {
private static final HashMap<String, String> uf = new HashMap();
/** return all states of brasil */
public static HashMap<String, String> getEstados(){
uf.put("AC", "AC");
uf.put("AL", "AL");
uf.put("AM", "AM");
uf.put("AP", "AP");
uf.put("BA", "BA");
uf.put("CE", "CE");
uf.put("DF", "DF");
uf.put("ES", "ES");
uf.put("FN", "FN");
uf.put("GO", "GO");
uf.put("MA", "MA");
uf.put("MG", "MG");
uf.put("MS", "MS");
uf.put("MT", "MT");
uf.put("PA", "PA");
uf.put("PB", "PB");
uf.put("PE", "PE");
uf.put("PI", "PI");
uf.put("PR", "PR");
uf.put("RJ", "RJ");
uf.put("RN", "RN");
uf.put("RO", "RO");
uf.put("RR", "RR");
uf.put("RS", "RS");
uf.put("SC", "SC");
uf.put("SE", "SE");
uf.put("SP", "SP");
uf.put("TO", "TO");
return uf;
}
}
// my combobox
private ComboBox comboEstado;
comboEstado = new ComboBox("States");
comboEstado.setWidth("100px");
HashMap<String, String> estados = EstadosBrasil.getEstados();
for(Entry<String, String> e : estados.entrySet()){
Object obj = comboEstado.addItem();
comboEstado.setItemCaption(e.getKey(), e.getValue());
comboEstado.setValue(obj);
}
mainLayout.addComponent(comboEstado);
任何想法 ?
谢谢
更改-
Object obj = comboEstado.addItem();
comboEstado.setItemCaption(e.getKey(), e.getValue());
comboEstado.setValue(obj);
至-
comboEstado.addItem(e.getKey());
comboEstado.setItemCaption(e.getKey(), e.getValue());
如果您想同时显示键和值对,则可以执行以下操作:
comboEstado.setItemCaption(e.getKey(), e.getKey() + " : " + e.getValue());
顺便说一句,我希望您可以更改这些值。 如果键和值都相同,则可以使用Set 。
在新的Vaadin 8 API中,组合框上没有addItems方法。 以下代码有效:
Map<String, String> map = new HashMap<>();
ComboBox combobox = new ComboBox<>("My Combobox");
combobox.setItems(map);
combobox.setItemCaptionGenerator(new ItemCaptionGenerator() {
@Override
public String apply(Object o) {
HashMap m = (HashMap) o;
return m.keySet().stream().findFirst().get().toString();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.