コメントで答えたと思いますが、詳細が多すぎます。次のコードは、現在と同じ方法でFPSを制限する必要があったアプレットからほぼ正確に取得されています(keyPressedではなくmouseMoveを使用していた場合を除く)。
private long lastDrawTime = 0;
public void keyPressed(KeyEvent e) {
if (Calendar.getInstance().getTimeInMillis() - lastDrawTime < 20) return;
//do whatever needs to be done before redrawing
draw();
lastDrawTime = Calendar.getInstance().getTimeInMillis();
}
ここで起こっていることはlastDrawTime
、最後の再描画が行われた時間を格納するインスタンス変数があるということです。この変数は、描画が行われる前に発生したkeyPressedイベントの現在の時刻と比較されます。時間の差が許容間隔(この場合は20ミリ秒、つまり1秒あたり50フレーム)よりも小さい場合、関数は戻り、描画や更新は行われません。ただし、十分な時間が経過すると、通常の処理がすべて実行され、現在の時刻が変数に格納されます。