【问题标题】:Populate ComboBox with HashMap?用 HashMap 填充 ComboBox?
【发布时间】:2013-12-19 10:54:18
【问题描述】:

我正在尝试使用信息哈希图填充 vaadin7 的组合框。我创建了一个类,当我得到返回值时返回一个 HashMap,我使用一个 for each 来填充这个组合框,但只显示数字而不是 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);

有什么想法吗?

谢谢

【问题讨论】:

  • 注意:为什么不使用 HashSet ?键/值对始终相同。

标签: java frameworks vaadin vaadin7


【解决方案1】:

改变-

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());

顺便说一句,我希望你能改变价值观。如果 key 和 value 相同,则可以使用 Set

【讨论】:

  • @FernandoPaiva 很高兴听到。 :)
  • ComboBox 没有addItem 方法,首先我需要使用getItems() 然后add()addAll()
  • @OrdinaryDraft 在版本 8 上,您可以调用 add。 vaadin.com/docs/v8/framework/components/…
【解决方案2】:

在新的 Vaadin 8 API 中,Combobox 上没有 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();
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2023-03-16
    相关资源
    最近更新 更多