Срещнах "странен" проблем.
Правя програма за чат на Java и тя е проектирана по начин, по който вашите контакти се слушат с JList. Когато съобщение бъде получено от който и да е контакт, JList все пак трябва да избере контакта, който е бил избран преди получаването на съобщението. Контактът, който ми е изпратил съобщението, трябва да отиде в горната част на списъка, но не и да бъде избран. Реших този проблем, като запазих индекса на текущо избрания контакт и написах тези два реда.
за актуализиране на jlist с моя defaultlistmodel
contactsJList.setModel(модел);
за избор на избрания преди това контакт. Правя това, защото jlist "забравя" за състоянието на избор, след като се актуализира.
contactsJList.setSelectedIndex(selectedContactIndex);
Проблемът е, че setSelectedIndex изглежда не избира конкретния обект наистина. Селектира го и мога да го видя с очите си, но някак си селекцията все още е там, където последно щракнах с мишката.
Ще се опитам да обясня проблема с пример, за да стане ясно.
Когато изпратя съобщение до контакт, кажете контакт с името Джей и индекс 5 в списъка, този контакт ще се премести в горната част на списъка и ще бъде избран (това е така, защото аз изпращам съобщението, а не аз получаване на такъв). Това означава, че Jay става индекс 0 и се избира чрез писане:
contactsJList.setSelectedIndex(0);
Сега, когато получа съобщение от друг контакт, например с името Ан, все още искам Джей да бъде избран. Ан стига до върха на списъка с индекс 0, а Джей е индекс 1 и втори в списъка. Проблемът сега е, че Jay не се избира, ЗАЩОТО не съм щракнал върху него лично с мишката, преди да получа съобщението от Ann, вместо това написах в код, че Jay трябва да бъде избран (и да бъде текущо избраният индекс). Сега си спомнете, че Джей беше индекс 5 на първо място, преди да му изпратя съобщение (това е и индексът, върху който щракнах с мишката). Така че вместо Jay да бъде избран след получаване на съобщението от Ann, индекс номер 5 се избира.
Защо setSelectedIndex() не работи правилно? Не мисля ли правилно или нещо подобно? Как мога да разреша проблема си? Може би трябва да използвам ListSelectionModel?
Помощта ще бъде наистина оценена! Благодаря много предварително