Tarde !!!
Marky, depois de muito quebrar a cabeça fiz alguns testes e que aqui funcionou, agora eu não sei te falar se o problema acontece apenas para quem desenvolve com netbeans ( que é o meu caso ), acabei fazendo mais um teste com uma jframe bem simples fora de um netbeans module, e também ocorre o problema…
…depois de pesquisar em alguns forum e conversar com um colega aqui do banco, que me perguntou sobre os eventos de atualização ( fireContentsChanged,fireIntervalAdded ) resolvir fazer alguns alterações que funcionaram, ok até aqui resolvido !!!
Mas com isso apareceu um outro problema, quando vc usa apenas o add os itens são duplicados e ainda não achei uma solução para isso…
Enfim fica aqui o workaround !!!
abraços !
segue o codigo alterado :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.think.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.ComboBoxModel;
import com.towel.bean.DefaultFormatter;
import com.towel.bean.Formatter;
import javax.swing.AbstractListModel;
public class ObjectComboBoxModel<T> extends AbstractListModel implements ComboBoxModel {
private List<T> data;
private T selectedItem;
private Formatter formatter;
private Map<Object, T> maps = new HashMap<Object, T>();
public ObjectComboBoxModel() {
data = new ArrayList<T>();
formatter = new DefaultFormatter();
//
}
public void setFormatter(Formatter formatter) {
if (formatter == null) {
System.out.println("Formatter can't be null. A default one will be set.");
formatter = new DefaultFormatter();
}
this.formatter = formatter;
maps.clear();
for (T t : data){
maps.put(formatter.format(t), t);
}
}
// public void add(T obj) {
// data.add(obj);
// maps.put(formatter.format(obj), obj);
//
// }
public void clear() {
data.clear();
maps.clear();
}
public void setData(List<T> list) {
data = list;
maps.clear();
for (T t : data){
maps.put(formatter.format(t), t);
}
fireContentsChanged(data, 0, data.size()-1);
}
public T getSelectedObject() {
return selectedItem;
}
@Override
public Object getSelectedItem() {
return formatter.format(selectedItem);
}
@Override
public void setSelectedItem(Object arg0) {
selectedItem = maps.get(arg0);
}
public void setSelectedObject(T obj) {
selectedItem = obj;
}
@Override
public Object getElementAt(int arg0) {
return formatter.format(data.get(arg0));
}
@Override
public int getSize() {
return data.size();
}
// @Override
// public void addListDataListener(ListDataListener l) {
// }
//
// @Override
// public void removeListDataListener(ListDataListener l) {
// }
}