我试图用它们中心的一条线将彼此连接起来

时间:2016-01-14 09:00:51

标签: java user-interface javafx javafx-2 javafx-8

尝试使用从圆心到另一个圆的线将图中的圆圈连接在一起。应该显示该行是否会拖动鼠标。当我释放鼠标时,它应该不显示任何行。 这是代码。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.shape.StrokeType;
import javafx.stage.Stage;

public class Projekt extends Application {

@Override
public void start(Stage primaryStage) {
   Pane pane = new Pane();
   //Inserting Circles
   for(int i=0;i<10;i++)
   {
       for(int j=0;j<10;j++)
       { 
           Circle c = new Circle(i*60+10,j*60+10,10);
           c.setFill(Color.WHITE);
           c.setStroke(Color.BLACK);
           c.setStrokeWidth(2);
           c.setStrokeType(StrokeType.OUTSIDE);
           c.setOnMouseDragged((MouseEvent e)->{
               Line line = new Line(c.getCenterX(),c.getCenterY(),e.getX(),e.getY());


           });
           pane.getChildren().add(c);



       }
   }



    Scene scene = new Scene(pane,600,600);
    primaryStage.setScene(scene);
    primaryStage.setTitle("Hello World!");

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

}

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

您需要将所有行添加到窗格中的所有内容。因为代码中有行创建,但没有任何内容将此行添加到窗格中。而且你可能不希望每次都创建新的行,所以只需创建一些行(甚至可以是静态行)并使用line.setStartX(x); line.setStartY(y);line.setEndX(e.getX()); line.setEndY(e.getY());更改坐标在每个鼠标按下和鼠标拖动事件。

我认为你只能使用1 setOnMouseDragged个监听器才能做到这一点,你必须至少使用其他一些事件来设置你的线是可见的和不可见的。

以下是您可以使用的初学者代码:

public class Main extends Application {

private Line line = new Line();

@Override
public void start(Stage primaryStage) {
    Pane pane = new Pane();

    line.setVisible(false);
    pane.getChildren().add(line);

    //Inserting Circles
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            double x = i * 60 + 10;
            double y = j * 60 + 10;
            Circle c = new Circle(x, y, 10);
            c.setFill(Color.WHITE);
            c.setStroke(Color.BLACK);
            c.setStrokeWidth(2);
            c.setStrokeType(StrokeType.OUTSIDE);

            c.setOnMousePressed((MouseEvent e) -> {
                line.setStartX(x);
                line.setStartY(y);
            });

            c.setOnMouseReleased((MouseEvent e) -> {
                line.setVisible(false);
            });

            c.setOnMouseDragged((MouseEvent e) -> {
                line.setEndX(e.getX());
                line.setEndY(e.getY());
                line.setVisible(true);
            });

            pane.getChildren().add(c);

        }
    }