Java JTextField的闪烁颜色
我有一个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
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的默认背景。