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

时间:2014-06-25 12:19:11

标签: java swing user-interface colors jtextpane

我正在使用GUI实现SNMP监听器。 GUI应该根据其严重性以不同的颜色打印已解析的SNMP陷阱。为此,我使用了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);
    }
}

它正常工作,唯一的问题是在滚动或追加新文本时文本会搞乱。 搞砸了我的意思是:
     - 一行的上半部分或下半部分消失(留下一半不可读的字母)
     - 文本部分改变颜色(某些部分的红色变为深红色)
     - 两行彼此改变颜色。 (绿色部分有红色部分,红色部分有绿色部分)
     - 这些字母看起来很脏(字母没有尖锐的线条)

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

2 个答案:

答案 0 :(得分: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 );
}
  

。我使用的红色也变成深红色,文字是“脏”的,文字没有尖锐的线条

也许你正在使用透明背景。执行此操作时,请参阅Backgrounds With Transparency以了解问题。

如果您需要更多帮助,请为此及以后的所有问题发布适当的SSCCE

答案 1 :(得分:0)

在添加新字符串之前,您是否尝试重绘其背后的背景? 或者,如果您没有背景,可能在添加新字符串之前添加一个背景,即使它与当前背景颜色相同。

我说这个的原因可能就是文本正在分层,这就是为什么会发生这种情况。