2012-03-21 112 views
2

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

printf("hi"); 

printf变成了几秒钟后绿色。

可能吗?

+0

什么html标签? – mishadoff 2012-03-21 11:52:48

回答

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

} 
+0

'setForeground'调用确实改变了文本颜色,但改变了文本字段中的所有文本。根据这个问题,他只希望部分文本采用不同的颜色,这很好地由Stefan Lindenberg的回答 – Robin 2012-03-21 12:20:23

+0

呃..(耸耸肩)我的显示了'计时器'的实现,虽然当然OP会希望非重复实例。 – 2012-03-21 12:24:44

+0

好点。我忽略了问题中的“几秒钟后”部分。这个答案的+1为美好的代码和图片 – Robin 2012-03-21 12:26:55

4

您必须使用JEditorPane/JTextPane而不是JTextField,也可以通过覆盖paintComponent方法来绘制文本/字符串。

+0

对于实时元素,您需要制作一个新的Timer,并使用它在给定的时间长度内休眠。 – 2012-03-21 11:34:38

+0

我第一次阅读,因为你建议覆盖'JEditorPane'或'JTextPane'的'paintComponent()'。你可以编辑,使其更清楚? – 2012-03-21 12:33:20

5

试试这个:

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

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