Estou com esse problema, tenho um modelo para usar em ComboBox mas o problema é que toda vez que eu faço um setSelectedItem o index do ComboBox continua -1.
Como eu poderia resolver isso?
import javax.swing.*;
import java.util.List;
import java.util.ArrayList;
public class ArrayListComboBoxModel extends AbstractListModel implements MutableComboBoxModel {
private Object selectedItem;
private List list;
public ArrayListComboBoxModel(List list) {
this.list = new ArrayList(list);
}
public int getSize() {
return list.size();
}
public Object getElementAt(int i) {
return list.get(i);
}
public Object getSelectedItem() {
return selectedItem;
}
public void setSelectedItem(Object newValue) {
selectedItem = newValue;
// Problema aqui, nao atualiza o index do ComboBox
fireContentsChanged(this, -1, list.size());
}
// MutableComboBoxModel
public void addElement(Object element) {
list.add(element);
// Added at end, notify ListDataListener objects
int length = getSize();
fireIntervalAdded(this, length - 1, length - 1);
}
public void insertElementAt(Object element, int index) {
// Insert the element at the specified position
list.add(index, element);
// Added in middle, notify ListDataListener objects
fireIntervalAdded(this, index, index);
}
public void removeElement(Object element) {
// Find out position
int index = list.indexOf(element);
if (index != -1) {
// Remove an element
list.remove(element);
// Removed from middle, notify ListDataListener objects
fireIntervalRemoved(this, index, index);
}
}
public void removeElementAt(int index) {
if (getSize() >= index) {
// Remove an element at the specified position
list.remove(index);
// Removed from index, notify ListDataListener objects
fireIntervalRemoved(this, index, index);
}
}
}
comboRemetente.getModel().setSelectedItem(beanRemetente);
comboDestinatario.getModel().setSelectedItem(beanDestinatario);
comboRedespacho.getModel().setSelectedItem(beanRedespacho);
// Nem fazendo um repaitn no componente o index muda
comboRemetente.repaint();
comboDestinatario.repaint();
comboRedespacho.repaint();
// Aqui sempre retorna -1
System.out.println("Index: "+comboRemetente.getSelectedIndex());