У меня есть компонент, в котором я хочу отобразить пользовательский jtooltip. Это легко, просто измените метод getTooltip. Аналогично для местоположения и текста.
Однако я также хочу изменить таймеры. Всплывающая подсказка всегда должна отображаться, если указатель мыши находится над ячейкой компонента. Если он оставляет все это, он должен стать невидимым.
Я знаю, что могу использовать TooltipManager для контроля времени во всем мире. Но лучшее решение, вероятно, состоит в том, чтобы просто сократить это и отобразить подсказку самостоятельно с помощью мыши. Однако, когда я попытался сделать это (отменить регистрацию компонента в TooltipManager и установить подсказку видимой, с текстом и в правильном положении, в слушателе мыши), подсказка вообще не показывалась. Что я делаю не так?
Edit:
Теперь вопрос изменился! На 2 вопроса.
Мое решение на данный момент таково, однако он теряет тень, которую jtooltip всегда отображает иногда , и она скрыта, если мышь выходит в само всплывающее окно. Как отфильтровать события выхода мыши из всплывающего окна, если оно даже не является компонентом? Я мог бы сделать несколько взломов на основе lastPosition, но это кажется глупым, поскольку я действительно не знаю его ширину.
private Popup lastPopup;
private final JToolTip tooltip = ...;
private Point lastPoint;
@Override public void mouseMoved(MouseEvent e) {
Point p = privateToolTipLocation(e);
if (p == null || p.equals(lastPoint)) {
return;
}
lastPoint = p;
tooltip.setTipText(privateToolTipText(e));
//copy
p = new Point(p);
SwingUtilities.convertPointToScreen(p, this);
Popup newPopup = PopupFactory.getSharedInstance().getPopup(this, tooltip, p.x, p.y);
if (lastPopup != null) {
lastPopup.hide();
}
lastPopup = newPopup;
newPopup.show();
}
@Override public void mouseExited(MouseEvent e) {
if (lastPopup != null && someUnknownCondiction) {
lastPopup.hide();
lastPopup = null;
}
}