JTextField的闪烁颜色

时间:2012-06-21 00:16:50

标签: java swing colors jtextfield

如果JTextField的内容无效,我会将其清除。我希望背景闪红色一两次,以向用户表明发生了这种情况。我试过了:

field.setBackground(Color.RED);
field.setBackground(Color.WHITE);

但是在这么短暂的时间内它是红色的,不可能被看到。有什么提示吗?

2 个答案:

答案 0 :(得分:6)

正确的解决方案,几乎只是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);

进行调用

警告:代码既未编译也未经过测试。

答案 1 :(得分:2)

您需要扩展公共课Timer 这样做:

private class FlashTask extends TimerTask{
    public void run(){
       // set colors here
    }
}

您可以将Timer设置为在您希望创建闪烁效果的任何时间间隔内执行

来自文档:

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

在指定的延迟之后开始,为重复的固定速率执行安排指定的任务。