JComboBox.getSelectedIndex() sempre retorna -1

0 respostas
javer

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?

Segue o código e exemplo:
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);
        }
    }
}
Exemplo de uso onde não atualiza o 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());
Criado 3 de março de 2008
Respostas 0
Participantes 1