首页 > 解决方案 > 拖动画线 Javafx

问题描述

我希望能够拖动以绘制一条线,该线在两个节点(圆圈)中的每​​一个的中心结束。我有两个事件处理程序,我正在考虑监听新的鼠标点击,但是每当我点击时,什么都没有发生。

下面是开始方法:

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()。

任何帮助,将不胜感激!对于任何未知的违规行为,我提前道歉。

标签: javajavafxlinescene

解决方案


推荐阅读