Задержка изменения цвета текста в текстовом поле Swing - PullRequest
2 голосов
/ 21 марта 2012

Можно ли изменить цвет текста в текстовом поле? Я пытаюсь создать интерпретатор, поэтому мне было интересно, как бы вы изменили цвет текста в режиме реального времени. Например, слово, которое я ввожу в текстовое поле:

printf("hi");

Слово printf становится зеленым через несколько секунд.

Возможно ли это?

Ответы [ 3 ]

14 голосов
/ 21 марта 2012

BlinkColorTextField

package test;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class BlinkColorTextField {

    BlinkColorTextField() {
        final JTextField blinkingText = new JTextField("Red & Blue");
        ActionListener blinker = new ActionListener() {
            boolean isRed = true;
            public void actionPerformed(ActionEvent ae) {
                if (isRed) {
                    blinkingText.setForeground(Color.BLUE);
                } else {
                    blinkingText.setForeground(Color.RED);
                }
                isRed = !isRed;
            }
        };
        Timer timer = new Timer(1000, blinker);
        timer.start();
        JOptionPane.showMessageDialog(null, blinkingText);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new BlinkColorTextField();
            }
        });
    }

}
5 голосов
/ 21 марта 2012

Попробуйте это:

HighlightPainter greenPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN);

//in a thread...    
Highlighter h = tf.getHighlighter();
h.addHighlight(offset, offset+length, greenPainter); 
4 голосов
/ 21 марта 2012

Вы должны использовать JEditorPane / JTextPane вместо JTextField, а также вы можете нарисовать текст / строку, переопределив paintComponent метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...