摆脱jframe之间不必要的焦点变化

时间:2014-05-27 17:15:16

标签: java swing jframe focus

好吧,这是问题,我正在写一个简单的聊天程序。客户端有一个名为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不会保持焦点,焦点会在JFrameChatList之间交替摆动,这会导致用户没有足够的时间来编写简单的&# 34;你好&#34 ;.所以现在我有两个问题:

  • 是因为更新了我的jlist吗?
  • 有没有办法停止此操作并让ChatWindow仅在我点击它时获得焦点而不是通过更新它?

1 个答案:

答案 0 :(得分:1)

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

我认为不需要以下任何代码:

listbox.validate();

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