2012-03-21 3 views
2

Возможно ли изменить цвет текста в текстовом поле? Я пытаюсь построить интерпретатор, поэтому мне было интересно, как бы вы изменили цвет текста в реальном время. Например, слово я вхожу в текстовое поле:Изменение цвета отложенного текста в текстовом поле Swing

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

Эх .. (пожимает плечами), я показывал реализацию «Таймера», хотя, конечно, OP захотел бы не повторяющийся экземпляр. –

+0

Хорошая точка. Я упустил часть «после нескольких секунд» в вопросе. A +1 для этого ответа для хорошего кода и изображения – Robin

4

Вы должны использовать JEditorPane/JTextPane вместо JTextField, а также вы можете нарисовать текст/строку, переопределив метод paintComponent.

+0

Для элемента реального времени вам нужно создать новый таймер и использовать его для сна в течение заданного периода времени. –

+0

I-я прочитала это, рекомендуя переопределить 'paintComponent()' 'JEditorPane' или' JTextPane'. Не могли бы вы изменить, чтобы сделать его более понятным? –

5

Попробуйте это:

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

//in a thread...  
Highlighter h = tf.getHighlighter(); 
h.addHighlight(offset, offset+length, greenPainter); 
Смежные вопросы