java - 在 JList 上设置选定的索引

标签 java swing indexing chat jlist

我遇到了一个“奇怪”的问题。

我正在用 Java 编写一个聊天程序,它的设计方式是让您的联系人使用 JList 进行监听。当任何联系人收到消息时,JList 仍应选择在收到消息之前选择的联系人。向我发送消息的联系人应该位于列表顶部,但不会被选中。我通过保存当前所选联系人的索引并写入这两行解决了这个问题。

  1. 用于使用我的默认列表模型更新 jlist

    contactsJList.setModel(model);

  2. 用于选择先前选择的联系人。我这样做是因为 jlist 在更新后“忘记”了选择状态。

    contactsJList.setSelectedIndex(selectedContactIndex);

问题是 setSelectedIndex 似乎没有真正选择特定的对象。它选择了它,我可以用眼睛看到它,但不知何故,选择仍然是我上次用鼠标单击的位置。

我会尝试用一个例子来解释这个问题,以使其清楚。

当我向联系人发送消息时,假设联系人的名字为 Jay,列表中的索引号为 5,则该联系人将移至列表顶部并被选中(这是因为是我发送消息,我我没有收到)。这意味着 Jay 变为索引 0 并通过写入以下内容来选择:

contactsJList.setSelectedIndex(0);

现在,当我收到另一位联系人(例如姓名为 Ann)的消息时,我仍然希望选择 Jay。 Ann 位于列表顶部,索引为 0,Jay 索引为 1,位于列表第二位。现在的问题是 Jay 没有被选中,因为在收到 Ann 的消息之前我没有亲自用鼠标单击他,而是在代码中编写了应该选择 Jay(并且是当前选定的索引)。现在请记住,在我向 Jay 发送消息之前,Jay 的索引首先是 5(这也是我用鼠标单击的索引)。因此,在收到 Ann 的消息后,不是选择 Jay,而是选择索引号 5。

为什么 setSelectedIndex() 不能正常工作?是我想得不对还是怎么的?我该如何解决我的问题?也许我应该使用 ListSelectionModel?

非常感谢您的帮助!预先非常感谢您

最佳答案

不确定为什么使用 setModel() 方法来更新 JList。

如果您要在列表顶部添加项目,您只需使用:

DefaultListModel model = (DefaultListModel)list.getModel();
model.add(0, yourNewItem);

这将添加该项目,而不影响当前选定的项目。

关于java - 在 JList 上设置选定的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19366164/

相关文章:

java - 正则表达式匹配 *,à 和?

java:netbeans gui 按钮不能同时工作

java - 在可编辑 JComboBox 上调用 getSelectedItem() 时出现 NullPointerException

java - 扩展 JPanel 类中的 KeyListener

python - 将字符串中的字符与其索引号相乘

java - 通过 XXE 在 AWS lambda 中 etc/passwd 暴露有风险吗

java - 设置 WAR 中 jar 的优先顺序

lucene - Elasticsearch Multindex性能

java - 使用 BubbleSort 对 int 数组进行排序

sql - PostgreSQL:为什么这个查询不使用我的索引?