2012-03-21 4 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' 호출은 실제로 텍스트 색상을 변경하지만 텍스트 필드의 모든 텍스트를 변경합니다. 질문에 따르면, 그는 단지 Stefan Lindenberg의 답변 인 – Robin

+0

Eh .. (으s하는 소리)로 설명 된 다른 색상의 텍스트 부분 만 원한다. OP는 '타이머'구현을 보여 주지만 물론 OP는 비 반복 인스턴스. –

+0

좋은 지적. 질문에서 "몇 초 후"부분을 간과했습니다. 멋진 코드와 그림에 대한 대답은 +1입니다. – Robin

4

JTextField 대신 JEditorPane/JTextPane을 사용해야하며 paintComponent 메서드를 재정 의하여 텍스트/문자열을 그릴 수 있습니다.

+0

실시간 요소의 경우 새 타이머를 만들어 일정 시간 동안 잠자기 상태로 사용해야합니다. –

+0

나는'JEditorPane' 또는'JTextPane'의'paintComponent()'를 오버라이드 (override) 할 것을 권유하면서 그것을 처음 읽었습니다. 더 명확하게 편집 할 수 있습니까? –

5

이 시도 :

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

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