import javax.swing.event.AncestorListener; import javax.swing.event.AncestorEvent; import javax.swing.Timer; // first delay = delay static Timer installTimer(JComponent component, O r, long delay) { ret installTimer(component, r, delay, delay); } // first delay = delay static Timer installTimer(RootPaneContainer frame, long delay, O r) { ret installTimer(frame.getRootPane(), r, delay, delay); } // first delay = delay static Timer installTimer(JComponent component, long delay, O r) { ret installTimer(component, r, delay, delay); } static Timer installTimer(JComponent component, long delay, long firstDelay, O r) { ret installTimer(component, r, delay, firstDelay); } static Timer installTimer(final JComponent component, final O r, final long delay, final long firstDelay) { ret installTimer(component, r, delay, firstDelay, true); } static Timer installTimer(final JComponent component, final O r, final long delay, final long firstDelay, final bool repeats) { ret (Timer) swingAndWait(func { Timer timer = new Timer(toInt(delay), actionListener { pcall { if (!allPaused()) callF(r); } }); timer.setInitialDelay(toInt(firstDelay)); timer.setRepeats(repeats); bindTimerToComponent(timer, component); ret timer; }); } static Timer installTimer(JFrame frame, long delay, long firstDelay, O r) { ret installTimer(frame.getRootPane(), r, delay, firstDelay); }