無効なコンテンツがある場合にクリアされる JTextField があります。これが発生したことをユーザーに示すために、背景を 1 回または 2 回赤く点滅させたいと思います。私が試してみました:
field.setBackground(Color.RED);
field.setBackground(Color.WHITE);
しかし、それはおそらく見えないほどの短い間だけ赤くなります。任意のヒント?
無効なコンテンツがある場合にクリアされる JTextField があります。これが発生したことをユーザーに示すために、背景を 1 回または 2 回赤く点滅させたいと思います。私が試してみました:
field.setBackground(Color.RED);
field.setBackground(Color.WHITE);
しかし、それはおそらく見えないほどの短い間だけ赤くなります。任意のヒント?
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, 500, 2000);
警告: コードはコンパイルもテストもされていません。
public クラスのTimerを拡張する必要があります 。
private class FlashTask extends TimerTask{
public void run(){
// set colors here
}
}
Timer
点滅効果を作成するために、任意の間隔で実行するように設定できます
ドキュメントから:
public void scheduleAtFixedRate(TimerTask task, long delay, long period)
指定されたタスクを、指定された遅延後に開始して、固定レートで繰り返し実行するようにスケジュールします。