2012-03-21 120 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);