gpt4 book ai didi

java - 消除 jframe 之间不必要的焦点变化

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:35 24 4
gpt4 key购买 nike

好吧,问题来了,我正在写一个简单的聊天程序。客户端有一个名为 ChatList 类的 JFrame,其中包含一个显示在线用户的 JList。使用此方法每 2 秒刷新一次列表以显示用户的新状态:

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不会保持焦点,并且焦点会在ChatListChatWindow之间交替 Swing ,这导致用户甚至没有足够的时间来写一个简单的“Hello”。所以现在我有两个问题:

  • 是因为更新了我的jlist吗?
  • 有没有办法阻止这种情况,并使 ChatList 仅在我点击它时获得焦点,而不是通过更新它?

最佳答案

如果你想改变ChatList中的用户,那么你需要做的就是更新ListModel。然后,模型将通知 JList 数据已更改,并且 JList 将重新绘制自身,但不应将焦点从当前 Activity 窗口移开。

我认为以下任何代码都是不必要的:

listbox.validate();

topPanel.add(listbox, BorderLayout.CENTER);
this.setVisible(true);

关于java - 消除 jframe 之间不必要的焦点变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com