更改JTextPane的字体颜色并继续使用旧字体写入

时间:2017-09-18 19:50:19

标签: java swing

我的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个小时试图搞清楚,但没有运气。

编辑:我也尝试过使用荧光笔,但问题是一样的。

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。这可能不是很优雅,但解决了它。