onMouseEntered 不能正常工作 JavaFX

onMouseEntered doesn't work properly JavaFX

我正在窗格上绘制一个圆和一个文本,我想要的是在光标旁边显示一个文本,当它在圆上时显示 "Mouse is over the circle",当它在圆上时显示 "Mouse is outside the circle"它的外面。取而代之的是文本总是说 "Mouse is outside the circle" 除了圆圈上的某些位置(即使这样它也往往会闪回错误的位置)。我还尝试直接从 mouseEntered 和 mouseExited 事件设置文本,甚至更糟。我究竟做错了什么?更好的是,是否有另一种方法来确定光标是否在某个节点上?另外,如果你能向我解释为什么当我在 start 方法中移动 s 的定义时得到 "variable used in lambda expression should be effectively final",那就太好了:)

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Ex1512 extends Application {
    String s="";
    @Override
    public void start(Stage primaryStage) throws Exception {
        Text text = new Text();
        Pane pane = new Pane();

        Circle circle = new Circle(100, 100, 50);
        circle.setFill(Color.WHITE);
        circle.setStroke(Color.BLACK);
        circle.setOnMouseEntered(e -> s = "Mouse is over the circle");
        circle.setOnMouseExited(e -> s = "Mouse is outside the circle");
        pane.setOnMouseMoved(e -> {
            text.setText(s);
            text.setX(e.getX());
            text.setY(e.getY());
        });
        pane.getChildren().addAll(circle,text);
        Scene scene = new Scene(pane,300,300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}

您正在将文字放在圆圈上。所以文本接收到事件,然后又是圆圈。只需将文本从鼠标光标移开即可。

这解决了您的问题:

text.setX(e.getX()+20);

或者您可以在文本上使用 setMouseTransparent