[英]Binding HashMap to ComboBox
有沒有人舉例說明如何將HashMap的鍵綁定到ComboBox,以便HashMap中的更改立即反映到ComboBox?
謝謝!
編輯:
解決方案感謝“Hovercraft Full Of Eels”:
private Map<String, String> format = new LinkedHashMap<String,String>();
public class ToComboBoxModel<String> extends AbstractListModel<String> implements MutableComboBoxModel<String> {
private String selectedItem;
@Override
public Object getSelectedItem() {
return selectedItem;
}
@Override
public void setSelectedItem(Object anItem) {
// TODO Auto-generated method stub
for (java.lang.String str : format.keySet()){
if (anItem.equals(str))
{
selectedItem=(String) str;
break;
}
}
}
@Override
public String getElementAt(int index) {
List<Entry<String,String>> randAccess = new ArrayList<Entry<String,String>>((Collection<? extends Entry<String, String>>) format.entrySet());
return randAccess.get(index).getKey();
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return format.size();
}
@Override
public void removeElement(Object obj) {
// TODO Auto-generated method stub
}
@Override
public void removeElementAt(int index) {
// TODO Auto-generated method stub
}
@Override
public void addElement(String item) {
}
@Override
public void insertElementAt(String item, int index) {
// TODO Auto-generated method stub
}
}
我將創建一個實現MutableComboBoxModel<T>
接口的類,並使用TreeMap<T>
或SortedMap<T>
其他子項作為其數據核。 我不認為您想要使用HashMap
因為需要對JComboBox的模型進行排序並且不對HashMap進行排序。
該類還應該擴展AbstractListModel<E>
以便獲得ListModel的功能,自動保存您不必維護自己的EventListenerList並免費提供上面列表中的四個底部四個方法,以及一些fireXXX(...)
數據變更通知方法。
你必須做的是創建MutableComboBoxModel<T>
的接口API所規定的必要方法。 這只意味着實施12種方法,
MutableComboBoxModel<E>
,
void addElement(E item)
void insertElementAt(E item, int index)
void removeElement(E obj)
void removeElementAt(int index)
ComboBoxModel<E>
,
E getSelectedItem()
void setSelectedItem(E item)
ListModel<E>
,
void addListDataListener(ListDataListener listener)
無需編寫 - AbstractListModel的一部分 E getElementAt(int index)
int getSize()
void removeListDataListener(ListDataListener listener)
無需編寫 - AbstractListModel的一部分 我認為這應該是可行的。
編輯:再看一下這個,我遇到了insertElementAt(...)
。 由於我主張將SortedMap作為模型的核心,因此無法在Map中的某個位置任意添加元素,因為它按照“自然”順序排序。 這最適合使用ArrayList,Vector或其他類似的集合作為模型的數據核。
編輯2 :根據奧米德的建議,使用LinkedHashMap要好得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.