Избегайте всплывающей подсказки, захватывающей фокус мыши - PullRequest
0 голосов
/ 24 октября 2018

Как я могу создать всплывающую подсказку рядом с моим курсором без вызова обработчика 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 будет немедленно вызван, что приведет к появлению мерцающего цикла.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...