【问题标题】:JTextArea show last X linesJTextArea 显示最后 X 行
【发布时间】:2015-03-05 11:48:12
【问题描述】:

我想使用 jTextArea 作为我的应用程序的事件日志。我知道我可以重定向 system.out 和 system.in 但我想为我的代码的不同部分使用多个 jTextArea 日志。例如,我想做 TCPServer 日志并在 jTextArea 中显示它的日志。例如它应该有一些这样的数据。

2015-01-01 12:00:00 - TCPServer started listening on port 10000
2015-01-01 12:05:00 - Client with IP 192.168.0.1 connected
2015-01-01 12:06:00 - Client with IP 192.168.0.2 connected
2015-01-01 12:05:00 - Client with IP 192.168.0.1 send "Hello server" message 
2015-01-01 12:05:00 - Client with IP 192.168.0.1 disconnected

我想展示的是最后 X 行,可能 100 行作为限制。不应显示较旧的行。我知道当我添加 101 行时,我可以通过将 jTextArea 中的所有文本拆分为 \n 并用从 2 到 101 的字符串再次填充它来读取所有行,但我正在寻找更好、更有效的解决方案。

过去我想我找到了一些这样做的文档侦听器,但最近 3 天我找不到它。也许我现在搜索错了,或者对我的问题不好。

【问题讨论】:

    标签: java line limit jtextarea


    【解决方案1】:

    我想这就是你所说的听众:

    https://tips4java.wordpress.com/2008/10/15/limit-lines-in-document/

    使用简单:

    textComponent.getDocument().addDocumentListener(
        new LimitLinesDocumentListener(50) );
    

    【讨论】:

    • 我想我使用的是同一个文档侦听器,谢谢,我仍然不知道为什么我在 google 上找不到它。
    【解决方案2】:

    保留一个ArrayDeque<Integer> 来存储您打印到 JTextArea 的行的长度:每次插入一行时,如果少于 N(= 您预期的最大值)行,只需将其附加到末尾你的队列。如果已经有 N 行,则使用

    myTextArea.replaceRange("", 0, myQueue.remove()); 
    

    这将替换第一行,有效地删除它。

    要添加新行,请使用

    myQueue.addLast(textToAdd.length()); // maybe +1 to account for endline?
    myTextArea.append(textToAdd);        // may require a "/n"?
    

    这将比您当前的实现更有效。

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      相关资源
      最近更新 更多