拖放线Javafx

时间:2020-04-29 21:43:10

标签: java javafx line scene

我希望能够绘制一条以两个节点(圆形)中的每个节点的中心结尾的线。我有两个事件处理程序,我想听听新的鼠标单击,但是只要单击,就什么也没有发生。

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

任何帮助将不胜感激!对于任何未知的违规行为,我深表歉意。

0 个答案:

没有答案
相关问题