Как мога динамично да променя цвета на шрифта в JTextArea?

Пиша скрипт за редактор на код и искам динамични команди.

Така че, ако потребителят напише "клас", той ще промени цвета на "клас".

Как да направя това?

// 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.


person mgthomas99    schedule 29.08.2014    source източник
comment
Добре дошли в StackOverflow, ние не сме фабрика за кодове, както може да видите. Трябва да публикувате своя код или поне минимален пример, за да можем да го копираме и поставим и да ви помогнем. Ако не покажете никакви усилия да го разрешите сами, тогава не мисля, че някой ще се опита да ви помогне с това.   -  person Frakcool    schedule 29.08.2014
comment
Да, редактирах статията, докато я публикувахте. Благодаря!   -  person mgthomas99    schedule 29.08.2014


Отговори (1)


JTextArea е предназначен само да съдържа обикновен текст и не може да оцветява определени думи. Ако искате да можете да оцветявате различни думи, трябва да използвате JTextPane или JEditorPane.

За повече информация вижте този въпрос. Този въпрос също може да бъде полезен (особено втория отговор).

Ето един пример:

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", тя ще бъде показана в червено, в противен случай ще бъде показана в синьо.

person Zach    schedule 29.08.2014
comment
Благодаря за това, но изглежда извежда грешка. Грешката се появява на ред 5 от изпратения от вас код, където се казва StyleConstants.setForeground(style, Color.red); и не съм сигурен защо. Вероятно пропускам нещо очевидно, но съм сравнително нов в GUI програмирането. Някакви предположения? - person mgthomas99; 29.08.2014
comment
Изключение в основната нишка java.lang.Error: Неразрешени проблеми при компилиране: Синтаксична грешка на токен(и), неправилно поставена конструкция(и) Синтаксична грешка на токен (, изтрийте този токен Синтаксична грешка на токен), невалиден VariableDeclarator - person mgthomas99; 29.08.2014
comment
Е, намерих една грешка: липсваше ) на ред if (word.equals("Hello")*)*. Сега го поправих, но не получавам други грешки. Уверете се, че всичките ви импортирания са правилни. - person Zach; 29.08.2014
comment
Трябва да погледнете втория отговор тук: stackoverflow.com/questions/14400946/ Вероятно това е, което се опитвате да направите. - person Zach; 29.08.2014