删除Shape而不知道它的引用(javafx)

时间:2017-04-05 19:28:18

标签: java javafx shape geometry scene

我想在我的光标处创建一个圆圈,然后单击鼠标左键(这可以工作)并通过右键单击删除光标下方的圆圈(这不起作用)。

我的问题是我不知道如何在没有参考(名称)的情况下访问圆圈,因为所有圆圈都是在运行时创建的。我听说仿制药可以解决我的问题,但我真的不明白它们。如果有其他方式,请告诉我。

以下是代码:

public class circle extends Application {

@Override
public void start(Stage stage) {

    Group root = new Group();
    Scene scene = new Scene(root, 600, 600, Color.ALICEBLUE);

    scene.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {

            if(event.getButton() == MouseButton.PRIMARY) {
                root.getChildren().add(new Circle(event.getSceneX(), event.getSceneY(), 10, Color.DARKCYAN));
            }               

            // Does not work. It should delete the circle below the cursor
            if(event.getButton() == MouseButton.SECONDARY) {
                root.getChildren().remove((int)event.getSceneX(), (int)event.getSceneX());
            }
        }
    });

    stage.setScene(scene);
    stage.setTitle("Thx for helping me :)");
    stage.show();
}

public static void main(String[] args) {
    launch(args);
}}

如果我误解了术语&#34;参考&#34;对不起。我认为它是你创建它时给对象的名称。 (Circle&#34; reference&#34; = new Circle();)

帮助我的帮助!

1 个答案:

答案 0 :(得分:2)

直接注册听众以直接点击圈子:

scene.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent event) {

        if(event.getButton() == MouseButton.PRIMARY) {
            Circle circle = new Circle(event.getSceneX(), event.getSceneY(), 10, Color.DARKCYAN);
            circle.setOnMouseClicked(e  -> {
                if (e.getButton() == MouseButton.SECONDARY) {
                    root.getChildren().remove(circle);
                }
            });
            root.getChildren().add(circle);
        }               


    }
});