Java JTextField的闪烁颜色

Java JTextField的闪烁颜色,java,swing,colors,jtextfield,Java,Swing,Colors,Jtextfield,我有一个JTextField,如果它有无效内容,它将被清除。我想背景闪烁红色一到两次,以表明用户,这已经发生了。我试过: field.setBackground(Color.RED); field.setBackground(Color.WHITE); 但它是红色的,时间很短,不可能被看到。有什么建议吗?您需要扩展公共类 这样做: private class FlashTask extends TimerTask{ public void run(){ // set co

我有一个JTextField,如果它有无效内容,它将被清除。我想背景闪烁红色一到两次,以表明用户,这已经发生了。我试过:

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

但它是红色的,时间很短,不可能被看到。有什么建议吗?

您需要扩展公共类 这样做:

private class FlashTask extends TimerTask{
    public void run(){
       // set colors here
    }
}
您可以设置
定时器
以创建闪烁效果的任意间隔执行

从文件:

public void scheduleAtFixedRate(TimerTask任务,长延迟,长周期)


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

正确的解决方案(几乎由eric得出)是使用Swing计时器,因为计时器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,5002000)


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

这是一个不错的解决方案,但我只希望它闪现一次。问题更多的是,背景设置为红色的时间不够长。闪光一次,你的意思是改变颜色一秒钟,然后再改变回来并停留在那里吗?或者只是更改颜色并保持该颜色直到满足条件?“红色设置的时间不够长”您的意思是需要帮助编辑更改间隔吗?您的想法是正确的,但您的实现是错误的。因为这是一个Swing问题,所以原始海报不应该使用java.util.Timer,而应该使用javax.Swing.Timer或Swing Timer。它们对Swing事件线程的尊重有很大的不同。你可以看到这需要额外的努力。仅供参考:为什么你应该使用
计时器,为什么你看不到红色,这与我在中描述的差不多。+1这个答案很好,没有呼叫
挫折背景(color.WHITE)
这不是某些L&F的默认背景。