Как я могу создать всплывающую подсказку рядом с моим курсором без вызова обработчика OnMouseExit.Есть ли способ сделать подсказку непрозрачной для фокуса мыши?
Несколько лет назад была создана проблема JIRA, описывающая похожую ситуацию: https://bugs.openjdk.java.net/browse/JDK-8118199.
Работа схолст Я прикрепил слушателя мыши, чтобы постоянно показывать подсказку и обновлять в соответствии с данными, нарисованными под ним.
Tooltip tt = new Tooltip();
tt.setAnchorLocation(AnchorLocation.CONTENT_BOTTOM_RIGHT);
tt.setAutoFix(false);
double offset = 100;
this.setOnMouseMoved((event) -> {
//Position tooltip
if (!tt.isShowing()) {
tt.show(this, event.getScreenX() - offset, event.getScreenY() - offset);
} else {
tt.setX(event.getScreenX() - offset);
tt.setY(event.getScreenY() - offset);
}
//Update text
int xBucket = (int) ((event.getX() - marginLeft - gridXOffset) / (gridWidth / xSections));
int yBucket = (int) ((event.getY() - marginTop) / (gridHeight / ySections));
DoubleSummaryStatistics stat = dat[xBucket][yBucket];
tt.setText("Occurances: " + stat.getCount() + "\n"
+ "Average Fitness: " + df.format(stat.getAverage()) + "\n"
+ "Max Fitness: " + df.format(stat.getMax()) + "\n"
+ "Min Fitness: " + df.format(stat.getMin()));
});
this.setOnMouseExited((event) -> {
if (tt.isShowing()) {
tt.hide();
}
});
Как видите, всплывающая подсказка отображается чуть-чуть слева вверху из-за определенного смещения.Если значение установлено на два меньшего значения (20-0), всплывающая подсказка захватит фокус, как только он отобразится, и обработчик setOnMouseExit будет немедленно вызван, что приведет к появлению мерцающего цикла.