我有一个 JTextField,如果它有无效的内容,它就会被清除。我希望背景以红色闪烁一两次,以向用户表明这已经发生。我努力了:
field.setBackground(Color.RED);
field.setBackground(Color.WHITE);
但它在如此短暂的时间内是红色的,以至于不可能被看到。有小费吗?
我有一个 JTextField,如果它有无效的内容,它就会被清除。我希望背景以红色闪烁一两次,以向用户表明这已经发生。我努力了:
field.setBackground(Color.RED);
field.setBackground(Color.WHITE);
但它在如此短暂的时间内是红色的,以至于不可能被看到。有小费吗?
几乎由 eric 提出的正确解决方案是使用 Swing Timer,因为 Timer 的 ActionListener 中的所有代码都将在 Swing 事件线程上调用,这可以防止发生间歇性和令人沮丧的错误。例如:
public void flashMyField(final JTextField field, Color flashColor,
final int timerDelay, int totalTime) {
final int totalCount = totalTime / timerDelay;
javax.swing.Timer timer = new javax.swing.Timer(timerDelay, new ActionListener(){
int count = 0;
public void actionPerformed(ActionEvent evt) {
if (count % 2 == 0) {
field.setBackground(flashColor);
} else {
field.setBackground(null);
if (count >= totalCount) {
((Timer)evt.getSource()).stop();
}
}
count++;
}
});
timer.start();
}
它会通过调用flashMyField(someTextField, Color.RED, 500, 2000);
警告:代码既没有经过编译也没有经过测试。
您需要扩展公共类Timer 这样做:
private class FlashTask extends TimerTask{
public void run(){
// set colors here
}
}
您可以设置Timer
以您喜欢的任何间隔执行以创建闪烁效果
从文档:
public void scheduleAtFixedRate(TimerTask task, long delay, long period)
安排指定任务以重复固定速率执行,在指定延迟后开始。