JFrame
的{{1}}类,其中包含显示在线用户的ChatList
。使用此方法每2秒刷新一次用户的新状态:
JList
如果用户选择要与之聊天的客户端,则会打开另一个public void refresh(ArrayList<String> onlineUsers) {
System.out.println(onlineUsers);
DefaultListModel listModel2 = new DefaultListModel();
for (int i = 0; i < onlineUsers.size(); i++) {
if (!onlineUsers.get(i).equals(client.userName))
listModel2.addElement(onlineUsers.get(i));
}
if (!listModel2.equals(listModel)) {
listModel=listModel2;
listbox.setListData(listModel.toArray());
listbox.validate();
}
topPanel.add(listbox, BorderLayout.CENTER);
this.setVisible(true);
}
。问题是这个JFrame
不会保持焦点,焦点会在JFrame
和ChatList
之间交替摆动,这会导致用户没有足够的时间来编写简单的&# 34;你好&#34 ;.所以现在我有两个问题:
ChatWindow
仅在我点击它时获得焦点而不是通过更新它?答案 0 :(得分:1)
如果您想更改ChatList中的用户,那么您需要做的就是更新ListModel。然后,模型将通知JList数据已更改,JList将自行重绘,但不应将焦点从当前活动窗口移开。
我认为不需要以下任何代码:
listbox.validate();
topPanel.add(listbox, BorderLayout.CENTER);
this.setVisible(true);