2013-05-27 38 views
1

我正在使用Java7和SmartGWT 3.1。我遇到以下代碼,這些值不會按照我放入的順序顯示。SmartGWT - comboboxitem中的值的有序視圖

該ID的沒有排序(既不是升序也不是降序)。但是,這應該不重要,因爲如果我沒有完全錯誤,LinkedHashMap關於插入的命令。爲了確保我再次檢查了JavaDoc(http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html),情況就是這樣。

爲什麼ComboBoxItem忽略我的排序?有沒有其他方法可以實現ComboBoxItem的訂購?

+0

我不認爲你所提供的代碼是一個工作的例子,因爲按我的知識,SmartGWT的的ComboboxItem只需要'LinkedHashMap的<字符串,字符串>'爲valueMap&not'LinkedHashMap '。 – RAS

+0

它正在工作,它在調用cbi.setValueMap(key.toString)時在內部轉換它。但我也試過用LinkedHashMap ,沒有區別 – divadpoc

回答

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()])); 
+0

謝謝,我應該仔細閱讀。 _variable參數列表method_工作,謝謝。我用這種方法的問題是,我失去了映射到價值的關鍵。但我想我必須忍受它。再次感謝! – divadpoc

0

我建議你檢查一下你是否在你的代碼中設置了setSortField。如果你設置如下:

setSortField("null"); 

ComboBoxItem它將刪除排序你可能已經並將繼續爲後盾的LinkedHashMap的排序順序。

0

使用此操作的ComboxItem

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