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; public class AutoHide { private static final int DELAY = 500; final Timer timer; final JComponent popup; 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); timer.start(); } }); } protected void tryToClosePopup() { if(popup.isVisible()) { if (popup.getMousePosition(true) == null) { popup.setVisible(false); timer.stop(); } } else timer.stop(); } }