// instantiate only once per component! sclass InstantNeverHideToolTip > MouseAdapter { JComponent component; S text; JToolTip toolTip; private Popup popup; *(S *text, JComponent *component) { swing { component.addMouseListener(InstantNeverHideToolTip.this); toolTip = component.createToolTip(); // Hide also when component is removed from hierarchy bindToComponent(component, null, l0 hideToolTip); } } public void mouseEntered aka showToolTip(MouseEvent e) { if (empty(text)) ret; toolTip.setTipText(text); int x = e.getXOnScreen()+2; int y = e.getYOnScreen()+2; popup = PopupFactory.getSharedInstance().getPopup(component, toolTip, x, y); popup.show(); } public void mouseExited(MouseEvent e) { hideToolTip(); } void hideToolTip() { if (popup != null) { popup.hide(); popup = null; } } S getText() { ret text; } void setText(S text) swing { if (eq(text, getText())) ret; InstantNeverHideToolTip.this.text = text; toolTip.setTipText(text); } }