jtextPane.setText(“”)保持格式与之前的格式不同

时间:2014-04-10 20:57:55

标签: java swing jframe jtextpane settext

我将System.outSystem.err重定向到textPane中的scrollPane,以显示用户正在发生的事情的日志。

我还实现了一个简单的按钮,按下它时会将textPane文本设置为“”以清除它。

我现在发现的是.setText("")实际上保留了之前显示的内容的格式,并保留了断路器。例如,我将System.err显示为红色,如果在我的清除按钮中,我将.setText("")替换为.setText(“test”),然后如果我在textPane中有红色文本则文本将被 test 替换,但单词test将为红色!

现在我的问题是,如果我按下清除按钮一次,每当新消息到达textPane时,它将在开始时有一个不必要的永久空白行。所以这是我的问题:

  1. 为什么会发生这种情况,怎么能以某种方式保留之前的格式?
  2. 我该如何解决这个问题?
  3. 按下将使用System.out

    的按钮

    1

    按清除按钮

    2

    再次按下步骤1中的按钮

    3

    清除并按下将使用System.err

    的按钮

    4

    清除并按下将使用System.err

    的相同按钮

    5

    因此,您可以看到我是否使用System.out然后使用.setText(""),然后System.out会被窃听。如果我使用System.err然后使用.setText(""),那么System.err会被窃听。

2 个答案:

答案 0 :(得分:2)

听起来您可能正在使用Message Console类来进行日志记录。

确实有一个错误,当文档中的文本被清除时,它会将EOF字符串添加到Document。

无论如何,我刚修复了这个bug,你可以下载新版本。

答案 1 :(得分:0)

  • 对于文本颜色,当您调用System.err时,将文本颜色更改为红色。重置颜色的最佳方法是:在构造函数中,保存文本区域的原始颜色,如下所示:Color originalColor = inputText.getForeground();,当您要重置文本时,请执行以下操作:

    inputText.setForeground(originalColor); inputText.setText("");

  • 关于开头的空行,基本上不应该放这行,但也许它正在发生,因为你正在使用System.out。您可以尝试使用setText()而不是System.out来显示文本。