提问者:小点点

JTextPane中的彩色文本在附加新字符串时会变得杂乱


private void appendToPane(String msg, JTextPane p, Color c) {
    Style style = p.addStyle("I am a style", null);
    StyleConstants.setForeground(style, c);
    StyledDocument doc = p.getStyledDocument();
    try {
        doc.insertString(doc.getLength(), msg, style);
    } catch (Exception e) {
        System.err.println(e);
    }
}

它是工作的,唯一的问题是文本得到混乱时滚动或追加新的文本。我的意思是:
-一行的上半部分或下半部分消失(留下一半不可读的字母)
-文本部分改变颜色(某些部分红色变为暗红色)
-两行相互改变颜色。(绿色部分得到红色行,红色部分得到绿色行)
-字母看起来脏兮兮的(字母没有清晰的线条)

所有这些问题在调整窗口大小时消失,但在滚动或追加新文本时再次出现。


共1个答案

匿名用户

例如,一些新追加的行采用旧追加行的颜色,反之亦然

是,插入的文本将继承上一个文本的属性,除非您为插入的文本指定了属性。

在文本窗格末尾追加文本的基本代码如下所示:

//  Define a keyword attribute

SimpleAttributeSet keyWord = new SimpleAttributeSet();
StyleConstants.setForeground(keyWord, Color.RED);
StyleConstants.setBackground(keyWord, Color.YELLOW);
StyleConstants.setBold(keyWord, true);

//  Adding a new line of text

try
{
    StyledDocument doc = textPane.getStyledDocument();
    doc.insertString(doc.getLength(), "\nEnd of text", keyWord );
}