如何动态更改JTextArea中的字体颜色?

时间:2014-08-29 17:11:34

标签: java jtextarea

我正在为代码编辑器编写脚本,我想要动态命令。

因此,如果用户输入“class”,它将改变“class”的颜色。

我该怎么做?

// This is the main focus part of the code.

textarea.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent evt) {
            word += evt.getKeyChar();

            if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
                word = "";
                line = "";
                lineInMemory = line;
            }

            if(evt.getKeyCode() == KeyEvent.VK_SPACE) {
                word = word.replaceAll("null","");
                line += word;
                word = "";
                String text = textarea.getText();
                String[] words = line.split(" ");

                if(word.toLowerCase().equals("class")) {

                    // What the heck do I put here?!

                }       
            }
         }
    });

我已经有了关键的听众,他们阅读了这些键,将它们写成了单词,然后将这些单词放入句子中。我希望它能够输入关键字并在关键字输入时自动更改关键字的颜色,有点像Sublime Text的功能。

1 个答案:

答案 0 :(得分:1)

JTextArea仅用于包含纯文本,不能为某些单词着色。如果您希望能够为不同的单词着色,则需要使用JTextPaneJEditorPane

有关详细信息,请参阅此question。这个question也可能有所帮助(特别是第二个答案)。

以下是一个例子:

JTextPane textPane = new JTextPane();
StyledDocument doc = textPane.getStyledDocument();

Style style = textPane.addStyle("Style", null);
StyleConstants.setForeground(style, Color.red);
String word = "Hello";

if (word.equals("Hello")) {
    try {
        doc.insertString(doc.getLength(), word, style);
    } catch (BadLocationException ex) {
        ex.printStackTrace();
    }
} else {
    StyleConstants.setForeground(style, Color.blue);

    try {
        doc.insertString(doc.getLength(), word, style);
    } catch (BadLocationException e) {
        e.printStackTrace();
    }
}

这会产生一个字符串word。如果单词为"Hello",则它将以红色显示,否则将以蓝色显示。