【发布时间】:2014-12-09 10:45:45
【问题描述】:
我正在尝试使用 JTextArea 制作一个聊天框。它将在 0 处插入新的文本行,将文本逐行添加到 TextArea 的顶部。
我将用换行符分隔每一行并设置自动换行,但我无法找到一种方法来限制一次可见的消息数量。因此,如果我将限制设置为 100,我将如何使其显示的消息不能超过 100 条?我希望文本自动擦除最后一行并插入新行。
我知道如何以编程方式执行此操作,使用字符串的 ArrayList 将为每条消息添加一个新字符串,并删除第一个索引。但这有效吗?我不希望在循环 100 次并在每条发送的消息超过 100 条时重新打印所有消息时出现任何明显的延迟。
这是我目前的代码。
ArrayList<String> notice = new ArrayList<>();
public void notice(String user, String msg) {
notice.add(user+": "+msg+"\n");
if (notice.size() > 100) {
notice.remove(0);
getFrame().getGameGUI().getChat(0).setText("");
for (String s : notice) {
getFrame().getGameGUI().getChat(0).insert(s,0); //is this ideal with users regularly sending messages?
}
} else
getFrame().getGameGUI().getChat(0).insert(user+": "+msg+"\n",0);
}
仅供参考,getFrame().getGameGUI().getChat(0) 用于检索 JTextArea “noticeChat”。我在 TabbedPane 中有多个 JTextArea,因此我使用 getChat 来检索它们,而不是为每个 JTextArea 创建一个新函数。
抱歉,如果有任何混淆。我的主要问题是:当用户不断向其中插入新的文本行时,更新有限的大型 JTextArea 的理想方法是什么?
【问题讨论】:
-
您在这里似乎有很多问题。您能否(重新)说明您的问题以回复此问题,以便我/我们知道您想要回答什么?
-
为文本区域编写自己的文档,在插入时提供一些额外的内容(例如删除以前的消息)
-
基本上,我想知道我更新 JTextArea 的方法是否有效。如果没有,什么是做我正在寻找的好方法?同样,我只是试图让 TextArea 删除底部消息,并在达到其限制(例如 100)时将新消息插入顶部。我的方法是一个数组列表,它将循环并插入每个字符串,但是当用户输入消息时不断重新插入 100 条消息,我想知道效率。 Sergiy,如果不创建新文档,我的示例代码是否不够?
-
考虑使用 JList 而不是 JTextArea。然后你可以简单地删除列表中的一个项目。
标签: java swing text chat jtextarea