public class ListModel<T> extends DefaultListModel6<T> {
private static final long serialVersionUID = 1L;
+ /** How long to wait before displaying a tooltip, in milliseconds. */
+ private static final int DELAY_TOOLTIP_MS = 1000;
+
/**
* A filter interface, to check for a condition (note that a Predicate class
* already exists in Java 1.8+, and is compatible with this one if you
list.setModel(this);
- final DelayWorker tooltipWatcher = new DelayWorker(500);
+ final DelayWorker tooltipWatcher = new DelayWorker(DELAY_TOOLTIP_MS);
if (tooltipCreator != null) {
tooltipWatcher.start();
}
fireElementChanged(oldIndex);
fireElementChanged(index);
+ Window oldTooltip = tooltip;
+ tooltip = null;
+ if (oldTooltip != null) {
+ oldTooltip.setVisible(false);
+ }
+
if (ListModel.this.tooltipCreator != null) {
tooltipWatcher.delay("tooltip",
new SwingWorker<Void, Void>() {
@Override
protected void done() {
- Window oldTooltip = tooltip;
- tooltip = null;
- if (oldTooltip != null) {
- oldTooltip.setVisible(false);
- }
-
if (index < 0
|| index != hoveredIndex) {
return;
}
+ if (popup != null
+ && popup.isShowing()) {
+ return;
+ }
+
tooltip = newTooltip(index, me);
}
});
list.locationToIndex(e.getPoint()));
}
+ Window oldTooltip = tooltip;
+ tooltip = null;
+ if (oldTooltip != null) {
+ oldTooltip.setVisible(false);
+ }
+
popup.show(list, e.getX(), e.getY());
}
}