我在一个窗格上画一个圆圈和一个文字,我想要的是当光标在圆圈上方并且“鼠标在圆圈之外”时,光标旁边会显示一条文字,上面写着“鼠标在圆圈上” “当它外面。相反的是,文本总是说“鼠标在圆圈之外”,除了圆圈上的某些位置(即使那时它往往会闪回到错误的位置)。我也试过直接从mouseEntered和mouseExited事件设置文本,甚至更糟。我究竟做错了什么?更好的是,还有另一种方法来确定光标是否在某个节点上?另外,如果你能向我解释为什么我得到一个“lambda表达式中使用的变量应该是有效的最终”当我在start方法中移动s的定义时,它会很棒:)
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();
}
}
答案 0 :(得分:0)
您正在将文字放在圆圈上。所以文本接收事件,然后再次接收圆圈。只需将文本从鼠标光标重新定位即可。
这解决了您的问题:
text.setX(e.getX()+20);
或者您可以在文字上使用setMouseTransparent。