Столкнулся со "странной" проблемой.
Я делаю программу чата на Java, и она разработана таким образом, чтобы ваши контакты прослушивались с помощью JList. Когда сообщение получено каким-либо контактом, JList все равно должен выбрать контакт, который был выбран до получения сообщения. Контакт, отправивший мне сообщение, должен быть вверху списка, но не быть выбранным. Я решил эту проблему, сохранив индекс текущего выбранного контакта и написав эти две строки.
для обновления jlist с моей моделью defaultlistmodel
контактыJList.setModel(модель);
для выбора ранее выбранного контакта. Я делаю это, потому что jlist «забывает» о состоянии выбора после его обновления.
контактыJList.setSelectedIndex(selectedContactIndex);
Проблема в том, что setSelectedIndex, похоже, не выбирает конкретный объект на самом деле. Он выбирает его, и я могу видеть его глазами, но каким-то образом выбор остается там, где я в последний раз щелкнул мышью.
Я постараюсь объяснить проблему на примере, чтобы было понятно.
Когда я отправляю сообщение контакту, скажем, контакту с именем Джей и индексом 5 в списке, этот контакт переместится в начало списка и будет выбран (это потому, что это я отправляю сообщение, а не я). получение одного). Это означает, что Jay становится индексом 0 и выбирается, написав:
contactsJList.setSelectedIndex(0);
Теперь, когда я получаю сообщение от другого контакта, например, с именем Энн, я все еще хочу, чтобы Джей был выбран. Энн попадает в начало списка с индексом 0, а Джей занимает индекс 1 и второе место в списке. Теперь проблема в том, что Джей не выбран, ПОТОМУ ЧТО я не щелкнул по нему мышью до того, как получил сообщение от Энн, вместо этого я написал в коде, что Джей должен быть выбран (и быть текущим выбранным индексом). Теперь вспомните, что у Джея был индекс 5, прежде чем я отправил ему сообщение (это также индекс, по которому я щелкнул мышью). Таким образом, вместо выбора Джея после получения сообщения от Энн выбирается номер индекса 5.
Почему setSelectedIndex() не работает должным образом? Я не правильно думаю или что? Как я могу решить свою проблему? Может быть, мне следует использовать ListSelectionModel?
Помощь будет очень признательна! заранее большое спасибо