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。
我正在窗格上绘制一个圆和一个文本,我想要的是在光标旁边显示一个文本,当它在圆上时显示 "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。