SmartGWT - 在组合框架中有序查看值

时间:2013-05-27 09:25:35

标签: java smartgwt

我正在使用Java7和SmartGWT 3.1。我遇到以下代码,这些值不会按照我放入的顺序显示。

LinkedHashMap<Integer, String> insertOrdered = new LinkedHashMap<Integer, String>();
for (MyEnum me : MyEnum.values()) {
  insertOrdered.put(me.getId(), me.getMyName());
}
ComboBoxItem cbi = new ComboBoxItem();
cbi.setValueMap(insertOrdered);

ID不是有序的(既不是升序也不是降序)。但是,这应该不重要,因为如果我没有完全弄错,LinkedHashMap关于插入的命令。为了确保我再次检查了JavaDoc(http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html),情况确实如此。

为什么ComboBoxItem无视我的订购?有没有其他方法可以在ComboBoxItem中实现排序?

3 个答案:

答案 0 :(得分:2)

LinkedHashMap的Javadoc声明:

  

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

尽管如此,我同意他们出现的顺序应该是JLS所述的在枚举中声明的顺序。如果您遇到LinkedHashMap问题,那么您确实希望确保此订单,也许您可​​能想尝试使用variable argument list method设置值。您实际上将它更改为一个数组,它可能是不受欢迎的,但它可能会解决您的问题。

List<String> list = new ArrayList<String>();
for(MyEnum me: MyEnum.values()){
    list.add(me.getMyName());
 }

 ComboBoxItem cbi = new ComboBoxItem();
 cbi.setValueMap(list.toArray(new String[list.size()]));

答案 1 :(得分:0)

我建议您检查一下是否在代码中的某处设置了setSortField。如果您设置以下内容:

 setSortField("null");
ComboBoxItem 上,它将删除您可能拥有的任何排序,并将保留支持LinkedHashMap的排序顺序。

答案 2 :(得分:0)

将此操作用于ComboxItem

ComboxItem cb = new ComboxItem();
cb.setSortField(SortDirection.ASCENDING.compareTo(SortDirection.ASCENDING));