我创建了大小为5的圈子,其中包含Circle c = new Circle(x, y, 5);
。然后我做c.setOnMousePressed(mousePressedEventHandler);
但我在这里遇到了问题:我的圈子太小而且容易错过它。我想保持这个大小,所以有没有办法增加一个圆圈的命中框而不做一些更大的东西,比如创建一个更大的隐形圆圈,然后在其上设置清单?
答案 0 :(得分:2)
通过向圆圈添加透明笔划来增加命中区域。
注意:要实际使用点击框,您需要将pickOnBounds
属性设置为true
。
private static Circle createCircle(double x, double y, double radius, double hitRadius) {
Circle circle = new Circle(x, y, radius, Color.BLACK);
circle.setStrokeType(StrokeType.OUTSIDE);
circle.setStroke(Color.TRANSPARENT);
circle.setStrokeWidth((hitRadius < radius) ? 0 : (hitRadius - radius));
return circle;
}
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
Circle circle1 = createCircle(100, 100, 5, 20);
Circle circle2 = createCircle(150, 150, 5, 20);
circle1.setOnMouseClicked(evt -> System.out.println("clicked 1"));
circle2.setOnMouseClicked(evt -> System.out.println("clicked 2"));
root.getChildren().addAll(
circle1,
circle2
);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.show();
}