我的JTextPane字体颜色有问题,似乎无法找到解决方案。 我有一个文本框(JTextPane),用户在其中键入文本。在某些时候,他按下一个按钮,这将改变一些单词的颜色。
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBackground(attr, Color.RED);
StyledDocument doc = inputArea.getStyledDocument();
//find the start of the word
String wholeText = inputArea.getText();
int i = 0;
while (i <= wholeText.length() - word.length()) {
if (wholeText.substring(i, i + word.length()).equals(word)) {
doc.setCharacterAttributes(i, word.length(), attr, false);
}
i ++;
}
现在的问题是,如果这个单词是文本中的最后一个单词,如果用户返回写入文本,则新键入的文本为红色,而不是黑色。我花了2个小时试图搞清楚,但没有运气。
编辑:我也尝试过使用荧光笔,但问题是一样的。
答案 0 :(得分:0)
在将带有属性的文本插入文档后,我才使用以下代码:
// Newly typed text at the end of the document will inherit the
// "keyword" attributes unless we remove the attributes
textPane.setCaretPosition(doc.getLength());
textPane.getInputAttributes().removeAttributes(keyWord);
答案 1 :(得分:0)
好的,所以我想出来,所以我会发布我的解决方案。 即使使用上述解决方案,如果我点击突出显示的单词,例如添加了一个字符,插入符将变为红色并且不会被任何内容修复。
这就是为什么我在文本窗格中添加了一个键监听器,并且在每个键击中我都这样做了:
inputArea.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
StyleConstants.setForeground(blackColor, Color.BLACK);
inputArea.setCharacterAttributes(blackColor, false);
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
});
其中黑色的类型为SimpleAttributeSet。这可能不是很优雅,但解决了它。