【发布时间】:2012-04-05 21:57:44
【问题描述】:
是否可以更改文本字段中文本的颜色?我正在尝试构建一个解释器,所以我想知道如何实时更改文本的颜色。 例如,我在文本字段中输入的单词是:
printf("hi");
单词printf 几秒钟后变成绿色。
有可能吗?
【问题讨论】:
标签: java swing textfield keyword
是否可以更改文本字段中文本的颜色?我正在尝试构建一个解释器,所以我想知道如何实时更改文本的颜色。 例如,我在文本字段中输入的单词是:
printf("hi");
单词printf 几秒钟后变成绿色。
有可能吗?
【问题讨论】:
标签: java swing textfield keyword
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();
}
});
}
}
【讨论】:
setForeground 调用确实改变了文本颜色,但改变了文本字段中的所有文本。根据问题,他只希望部分文本采用不同的颜色,Stefan Lindenberg 的回答很好地说明了这一点
Timer 的实现,尽管 OP 当然想要一个非重复实例。
试试这个:
HighlightPainter greenPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN);
//in a thread...
Highlighter h = tf.getHighlighter();
h.addHighlight(offset, offset+length, greenPainter);
【讨论】:
您必须使用JEditorPane / JTextPane 而不是 JTextField,您还可以通过覆盖 paintComponent 方法来绘制文本/字符串。
【讨论】:
paintComponent() 的JEditorPane 或JTextPane。您可以编辑以使其更清晰吗?