У меня есть 6 полей со списком, использующих один и тот же DefaultListModel с 6 элементами. Я использую ActionListener, так что когда одно из полей со списком выбирает элемент из списка, который выбрал другой список со списком, они меняют местами тех, кто выбрал элементы. AKA, поле со списком 1, в котором был выбран элемент 1, выбирает элемент 2, который был выбран в поле со списком 3, и после того, как слушатель запустит поле со списком 3, будет выбран элемент 1.
ActionListener abilCBListener = new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
JComboBox cb = (JComboBox)evt.getSource();
int ind = abilCBArray.indexOf(cb);
int num = 15;
int dup = 7;
if(abilCBArray.size() == 6 && abilCBBoo == true){
abilCBBoo = false;// prevents another combobox's listener from firing
for(int i = 0; i < abilCBArray.size();i++){
//System.out.println("i = " + i + " index = "+abilCBArray.get(i).getSelectedIndex());
if(i != ind){
num -= abilCBArray.get(i).getSelectedIndex();
System.out.println("i = "+ i+" num = "+ num+ " Index = "+abilCBArray.get(i).getSelectedIndex() );
if(abilCBArray.get(i).getSelectedIndex() == cb.getSelectedIndex()){
dup = i;
}
}
}
if(num < abilCBArray.size() && dup != 7){
abilCBArray.get(dup).setSelectedIndex(num);
}
}else{
System.out.println("Tried to run abilCBArrayChange without full array");
}
abilCBBoo = true;
}
};
Проблема в том, что пользователь может поместить случайный набор чисел в DefaultListModel, и если какое-либо из чисел совпадает, поля со списком выберут индекс первого экземпляра числа, которое испортит мой ActionListener. Все, что я прочитал, похоже, указывает на то, что вы должны сделать каждый элемент в списке уникальным, чтобы обойти проблему выбора поля со списком, и я все равно не смогу использовать getSelectIndex(), потому что, если я это сделаю, он все равно вернет первый экземпляр числа.
getSelectedIndex()
должен дать вам индекс выбранного элемента - person XtremeBaumer   schedule 16.05.2017