package org.freeplane.core.ui.components; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JComponent; import javax.swing.Timer; import org.freeplane.core.ui.MouseInsideListener; public class AutoHide { private static final int DELAY = 500; final Timer timer; final JComponent popup; private MouseInsideListener mouseInsideListener; public static void start(JComponent popup){ new AutoHide(popup); } private AutoHide(JComponent popup) { super(); this.popup = popup; this.timer = new Timer(DELAY, new ActionListener() { public void actionPerformed(ActionEvent e) { tryToClosePopup(); } }); timer.setRepeats(true); popup.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { AutoHide.this.popup.removeMouseListener(this); mouseInsideListener = new MouseInsideListener(AutoHide.this.popup); mouseInsideListener.mouseEntered(e); timer.start(); } }); } protected void tryToClosePopup() { if(popup.isVisible()) { if (! mouseInsideListener.isMouseInside()) { popup.setVisible(false); stop(); } } else stop(); } protected void stop() { mouseInsideListener.disconnect(); timer.stop(); } }