2012-03-21 6 views
2

テキストフィールドのテキストの色を変更することはできますか?インタープリタを作成しようとしていますので、実際のテキストの色をどのように変更するのでしょうか時間。 例えば、私がテキストフィールドに入力した単語がある:スウィングテキストフィールドのテキストの色の変更を遅らせる

printf("hi"); 

単語printfは、数秒後にグリーンになります。

それは可能ですか?

+0

何htmlタグについては? – mishadoff

答えて

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'呼び出しは実際にテキストの色を変更しますが、テキストフィールドのすべてのテキストを変更します。質問によれば、彼はステファン・リンデンベルグの答えでよく描かれている別の色のテキストの一部だけを望んでいる。 – Robin

+0

ええ..(肩をすくめて)鉱山では、非反復インスタンス。 –

+0

良い点。私は質問の「数秒後​​」の部分を見落としました。素敵なコードと画像のためのこの答えのための+1 – Robin

4

JTextFieldの代わりにJEditorPane/JTextPaneを使用する必要があります。また、paintComponentメソッドをオーバーライドしてテキスト/文字列を描画することもできます。

+0

リアルタイム要素では、新しいTimerを作成し、それを一定の時間スリープ状態にする必要があります。 –

+0

私は 'JEditorPane'または' JTextPane'の 'paintComponent()'をオーバーライドすることをお勧めします。それをもっと明確にするために編集できますか? –

5

これを試してみてください:

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

//in a thread...  
Highlighter h = tf.getHighlighter(); 
h.addHighlight(offset, offset+length, greenPainter); 
関連する問題