2014-06-25 72 views
0

我正在使用GUI实现SNMP侦听器。 GUI应该根据其严重性以不同颜色打印解析的SNMP陷阱。为此,我使用了JTextPane。添加新字符串时,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

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

我说这个的原因,也许是文本层叠在自身上,这就是为什么发生这种情况。

+0

是的,没有区别 – Atonic

0

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

是,插入的文本将继承以往文本的属性,除非你指定插入的文本属性。

在文本窗格的末端附加文本会是这样的基本代码:

// 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以解决此问题和所有未来问题。