Перетаскивание линии Javafx - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу иметь возможность перетаскивать линию, которая заканчивается в центре каждого из двух узлов (кругов). У меня есть два обработчика событий, которые, я думаю, слушают новые щелчки мыши, но всякий раз, когда я нажимаю, ничего не происходит.

Вот метод Start:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Line;
import javafx.scene.shape.Circle;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;




@Override
    public void start(Stage primaryStage) {
    Group root = new Group();

        Canvas canvas = new Canvas(500,500);
        GraphicsContext gc = canvas.getGraphicsContext2D();

        //Draw Circles onto a Pane:
        Pane overlay = new Pane();
        for (int i = 50; i < xDim; i+=50) {
            for (int j = 50; j < yDim; j+=50) {
                Circle c1 = new Circle();
                c1.setCenterX(i);
                c1.setCenterY(j);
                c1.setRadius(5);
                overlay.getChildren().add(c1);
            }
        }


        drawLine(overlay);
        root.getChildren().addAll(canvas,overlay);
        primaryStage.setScene(new Scene(root, 500, 500));
        primaryStage.show();
    }

А вот drawLine ( ):


            Line l = new Line();
            overlay.addEventHandler(MouseEvent.MOUSE_PRESSED,
                    new EventHandler<MouseEvent>() {


                public void handle(MouseEvent t) {
                    if (t.getSource() instanceof Circle) {

                        Circle p = ((Circle) (t.getSource()));

                        double circleX = p.getCenterX();
                        double circleY = p.getCenterY();

                        l.setStartX(circleX);
                        l.setStartY(circleY);


                    } else {
                        Node p = ((Node) (t.getSource()));

                        double orgTranslateX = p.getTranslateX();
                        double orgTranslateY = p.getTranslateY();
                    }
                }
            });

            overlay.addEventHandler(MouseEvent.MOUSE_RELEASED,
                    new EventHandler<MouseEvent>() {


                public void handle(MouseEvent t) {
                    if (t.getSource() instanceof Circle) {

                        Circle p = ((Circle) (t.getSource()));

                        double circleX = p.getCenterX();
                        double circleY = p.getCenterY();

                        l.setEndX(circleX);
                        l.setEndY(circleY);
                        overlay.getChildren().add(l);
                    } else{}
                }
            });
        };

Вы можете видеть, что линия рисования имеет два разных обработчика событий, один для клика и один для выпуска, и единственное, что изменяется, это myLine.setEndX ().

Любая помощь будет оценена! Я заранее прошу прощения за любые неизвестные нарушения.

...