這兩天用到JCombobox,之前一直是直接添加字符串值,但是這樣顯示出來太不友好,例如原本可以顯示爲“是”、“否”的,卻顯示爲“0”、“1”。所以需要改變這種情況。網上搜了一下,有人擴展了一個KeyedComboboxModel,但是顯示的還是value的值。
摸索了一下,可以直接將數據模型對象添加到DefaultComboBoxModel中。只需要注意兩點:
1、在數據模型對象中覆蓋一個toString方法,返回用於在JCombobox中作爲顯示的成員變量。
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return name;
}
2、在設置JCombobox選中項時用以下語句:
getJComboBoxJob().getModel().setSelectedItem(bean);
原因分析:
查看JComboBox類Line:543,在進行元素匹配時用的是equals,只對字符串元素有效。
if (anObject.equals(element)) {
而上面正確的用法則會直接將當前選中元素指針指向你傳入的元素。見DefaultComboBoxModel類Line:87。
selectedObject = anObject;