0

感谢您查看我的问题。我会尽量让它清晰和简洁。

该程序


好的,所以我已经实现了一个聊天程序。该聊天程序的部分功能是在线用户列表。此列表每 10 秒更新一次。这是我遇到问题的程序部分。每隔 10 秒,我的服务器将以一个 CSV 字符串向每个客户端发送一个包含所有在线用户的数据包。客户端成功解析数据包,并将每个名称加载到 ListView 中。所有这些事情都完全按照我想要的方式工作。

问题


当列表刷新时,所有焦点都丢失了。我想这是因为列表中的所有项目都被替换了,但我正在努力想办法解决它。之所以重要,是因为用户要向另一个用户发送消息,他们必须单击列表中的名称,然后发送消息。显然,如果它不断刷新它会使使用聊天程序非常烦人!

字符串填充此字段:

private DefaultListModel<String> usersList;

使用以下代码绑定到 ListView:

this.list = new JList(this.usersList);

并由来自服务器的数据更新,使用以下方法:

 public void setOnlineUsersList()
 {
    String[] onlineUsers = this.c.getOnlineUsers();
    // Request the client to query the server for online users. Execution waits until a  response is recieved.
    if (this.usersList.size() > 0) {
        // Ensure there are users online.
        this.usersList.clear();
        // Clear the users from the list, if they need to be replaced.
    }

    for (String s : onlineUsers)
    {
        // Add each username to the DefaultListModel, which updates the ListView.
        this.usersList.addElement(s);
    }
}

在线用户列表刷新前 在线用户列表刷新 刷新前 刷新后

问题


你们能给我提供任何方法,让客户端可以从“在线列表”中选择另一个用户,当列表刷新时,ListItem 会记住它的焦点,这样客户端就不必一直点击用户?我不是在这里寻找代码,也不是通过任何想象来快速修复。我只是想了几天,现在我被困住了,所以非常感谢任何帮助。

在此先感谢,克里斯。

4

1 回答 1

2

您可以简单地不删除所有条目,而是遍历每个名​​称的整个列表并查看它是否已经存在,在这种情况下您添加它。这应该保持对拥有它的项目的关注。

或者,您可以在 上放置一个侦听JList器,并存储选中的项目,然后在刷新后手动将其设置为选中。

于 2013-03-07T20:04:57.680 回答