onMouseEntered并不能正常使用JavaFX

时间:2015-03-30 05:31:06

标签: javafx mouseevent

我在一个窗格上画一个圆圈和一个文字,我想要的是当光标在圆圈上方并且“鼠标在圆圈之外”时,光标旁边会显示一条文字,上面写着“鼠标在圆圈上” “当它外面。相反的是,文本总是说“鼠标在圆圈之外”,除了圆圈上的某些位置(即使那时它往往会闪回到错误的位置)。我也试过直接从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();
    }

}

1 个答案:

答案 0 :(得分:0)

您正在将文字放在圆圈上。所以文本接收事件,然后再次接收圆圈。只需将文本从鼠标光标重新定位即可。

这解决了您的问题:

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

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