Swing文本字段中的延迟文本颜色更改

时间:2012-03-21 11:24:28

标签: java swing textfield keyword

是否可以更改文本字段中文本的颜色?我正在尝试构建一个解释器,所以我想知道如何实时更改文本的颜色。 例如,我在文本字段中输入的单词是:

printf("hi");

单词printf在几秒钟后变为绿色。

有可能吗?

3 个答案:

答案 0 :(得分:14)

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();
            }
        });
    }

}

答案 1 :(得分:5)

试试这个:

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

//in a thread...    
Highlighter h = tf.getHighlighter();
h.addHighlight(offset, offset+length, greenPainter); 

答案 2 :(得分:4)

您必须使用JEditorPane / JTextPane代替JTextField,并且还可以通过覆盖paintComponent方法来绘制文本/字符串。