Как установить задержку на выполнение KeyListener?
ExecutorService вам в помощь, плюс делайте disable на вашу кнопку.myBtn.setEnabled(false);
ExecutorService executor = Executors.newFixedThreadPool(10);
Runnable runnableTask = () -> {
    try {
        TimeUnit.MILLISECONDS.sleep(2000);
        myBtn.setEnabled(true);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
};
executorService.execute(runnableTask);
PS. Еще можно прямо в свинге треды запускать - stackabuse.com/how-to-use-threads-in-java-swing
Так что сложного. После первого нажатия блокируешь (деактивируешь) кнопку, одновременно запускаешь тред, который через указанный промежуток времени выполнить нужное действие. Кроме того, вместе с этим запускаешь ещё один тред, который ждёт указанный промежуток времени, а потом активирует эту кнопку.