package net.filebot.util.ui; import java.util.function.Consumer; import javax.swing.Timer; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; public class LazyDocumentListener implements DocumentListener { private Timer timer; private DocumentEvent lastEvent = null; public LazyDocumentListener(Consumer<DocumentEvent> handler) { this(200, handler); } public LazyDocumentListener(int delay, Consumer<DocumentEvent> handler) { timer = new Timer(delay, evt -> { handler.accept(lastEvent); lastEvent = null; }); timer.setRepeats(false); } @Override public void changedUpdate(DocumentEvent evt) { lastEvent = evt; timer.restart(); } @Override public void insertUpdate(DocumentEvent evt) { lastEvent = evt; timer.restart(); } @Override public void removeUpdate(DocumentEvent evt) { lastEvent = evt; timer.restart(); } }