在JList上设置选定的索引

时间:2013-10-14 17:54:01

标签: java swing indexing chat jlist

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

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

  1. 用于使用我的defaultlistmodel

    更新jlist

    contactsJList.setModel(模型);

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

    contactsJList.setSelectedIndex(selectedContactIndex);

  3. 问题是setSelectedIndex似乎没有选择真实的特定对象。它选择它,我可以用眼睛看到它,但不知何故,选择仍然是我最后用鼠标点击的地方。

    我将尝试用一个例子解释这个问题,以便明确。

    当我向联系人发送消息时,说明联系人名称Jay和列表中的索引5,此联系人将移至列表顶部并被选中(这是因为我发送消息,我'没有收到一个)。这意味着杰伊成为索引0并通过写作被选中:

    contactsJList.setSelectedIndex(0);
    

    现在,当我收到来自其他联系人的消息时,例如名字Ann,我仍然希望Jay被选中。 Ann以索引0到达列表的顶部,Jay在列表中是索引1和第二。现在的问题是周杰伦没有被选中,因为在收到Ann的消息之前我没有亲自用他的鼠标点击他,而是我在代码中写道Jay应该被选中(并且是当前选择的索引)。现在请记住,在我给他发送消息之前,Jay首先是索引5(这也是我用鼠标点击的索引)。因此,在收到Ann的消息后选择了Jay而不是Jay,索引号5被选中。

    为什么setSelectedIndex()没有正常工作?我不是想对吗?我怎样才能解决我的问题?也许我应该使用ListSelectionModel?

    非常感谢帮助!非常感谢您提前

1 个答案:

答案 0 :(得分:1)

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

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

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

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