避免工具提示抓住鼠标焦点

时间:2018-10-24 17:19:55

标签: java javafx tooltip

如何在不调用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

0 个答案:

没有答案