Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置新按钮拖动检测到的问题A_Java_Button_Drag And Drop_Javafx - Fatal编程技术网

Java 设置新按钮拖动检测到的问题A

Java 设置新按钮拖动检测到的问题A,java,button,drag-and-drop,javafx,Java,Button,Drag And Drop,Javafx,我使用JavaFX,项目有2个Ancorpane窗格和paneDrop,其中一个有一个按钮,当我拖动这个按钮创建新按钮时,当我拖动setOnDragDetected方法到新按钮时。问题是,当我尝试拖动一个新按钮时,只有最后一次创建按钮移动 @FXML private Button source; @FXML private AnchorPane pane; @FXML private AnchorPane paneDrop; private Button b; int i = 1; int

我使用JavaFX,项目有2个Ancorpane窗格和paneDrop,其中一个有一个按钮,当我拖动这个按钮创建新按钮时,当我拖动setOnDragDetected方法到新按钮时。问题是,当我尝试拖动一个新按钮时,只有最后一次创建按钮移动

@FXML
private Button source;

@FXML
private AnchorPane pane;

@FXML
private AnchorPane paneDrop;

private Button b;
int i = 1;
int moveI = 0;

@FXML
private void dragDetected(MouseEvent event) {

    System.out.println("onDragDetected");

    b = new Button(i + "");
    i++;
    pane.getChildren().add(b);
    b.setLayoutX(source.getLayoutX());
    b.setLayoutY(source.getLayoutX());
    /* drag was detected, start drag-and-drop gesture*/
    paneDrop.setOnDragOver(new EventHandler<DragEvent>() {

        @Override
        public void handle(DragEvent k) {

            paneDrop.setOnDragDropped(new EventHandler<DragEvent>() {

                @Override
                public void handle(DragEvent k1) {

                    System.out.println("ondragExited");
                    pane.getChildren().remove(b);
                    paneDrop.getChildren().add(b);

                    b.setLayoutX(k1.getSceneX() - paneDrop.getLayoutX());
                    b.setLayoutY(k1.getSceneY() - paneDrop.getLayoutY());

                    b.setOnDragDetected(new EventHandler<MouseEvent>() {
                        public void handle(MouseEvent t) {
                            /* drag was detected, start a drag-and-drop gesture*/
                            /* allow any transfer mode */

                            paneDrop.setOnDragOver(new EventHandler<DragEvent>() {

                                @Override
                                public void handle(DragEvent t) {
                                    System.out.println("ondragOver");

                                    paneDrop.setOnDragDropped(new EventHandler<DragEvent>() {

                                        @Override
                                        public void handle(DragEvent t1) {
                                            System.out.println("ondragOver");
                                            if (t1.getGestureSource() != pane
                                                    && t1.getDragboard().hasString()) {

                                                t1.acceptTransferModes(TransferMode.COPY_OR_MOVE);
                                            }

                                            t1.consume();
                                        }
                                    });

                                    b.setLayoutX(t.getSceneX());
                                    b.setLayoutY(t.getSceneY() - 224);

                                    if (t.getGestureSource() != pane
                                            && t.getDragboard().hasString()) {

                                        t.acceptTransferModes(TransferMode.COPY_OR_MOVE);
                                    }

                                    t.consume();

                                }
                            });

                            Dragboard db = b.startDragAndDrop(TransferMode.MOVE);
                            System.out.println("ttttttttttttt");
                            /* Put a string on a dragboard */
                            ClipboardContent content = new ClipboardContent();
                            content.putString(b.getText());
                            db.setContent(content);

                            t.consume();
                        }

                    });

                    k1.consume();
                }
            });

            System.out.println("ondragOver");

            b.setLayoutX(k.getSceneX() - pane.getLayoutX());
            b.setLayoutY(k.getSceneY() - pane.getLayoutY());

            if (k.getGestureSource() != pane
                    && k.getDragboard().hasString()) {

                k.acceptTransferModes(TransferMode.COPY_OR_MOVE);
            }

            k.consume();
        }
    });


    /* allow any transfer mode */
    Dragboard db = source.startDragAndDrop(TransferMode.MOVE);

    /* put a string on dragboard */
    ClipboardContent content = new ClipboardContent();
    //System.out.println(source.getText());
    content.putString(source.getText());
    db.setContent(content);

    event.consume();
}