我正在使用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);
}
}
它正常工作,唯一的问题是在滚动或追加新文本时文本会搞乱。
搞砸了我的意思是:
- 一行的上半部分或下半部分消失(留下一半不可读的字母)
- 文本部分改变颜色(某些部分的红色变为深红色)
- 两行彼此改变颜色。 (绿色部分有红色部分,红色部分有绿色部分)
- 这些字母看起来很脏(字母没有尖锐的线条)
调整窗口大小时所有这些问题都会消失,但在滚动或追加新文本时会重新出现。
答案 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)
在添加新字符串之前,您是否尝试重绘其背后的背景? 或者,如果您没有背景,可能在添加新字符串之前添加一个背景,即使它与当前背景颜色相同。
我说这个的原因可能就是文本正在分层,这就是为什么会发生这种情况。