Справка JavaFX, реализующая перетаскивание - PullRequest
0 голосов
/ 30 октября 2018

То, что я делаю, - это создание изображения для каждой карты в колоде карт. Для каждого вида изображения я добавляю два события setOnDragOver и setOnDragDropped. Однако, когда я нажимаю и пытаюсь перетащить карточку, мое заявление на печать для события даже не отображается.

То, что я пытаюсь сделать, это разрешить перетаскивать карту на панель. Поэтому измените положение в зависимости от того, где я его перетащил, но он все еще находится в окне. Вот события для просмотра изображения ниже.

        tempImageView.setOnDragOver(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent event) 
            {
                System.out.print("OnDragOver");
                Dragboard db = event.getDragboard();
                if (db.hasFiles()) 
                {
                    tempImage = card.getImage();
                    event.acceptTransferModes(TransferMode.ANY);
                }

                event.consume();
            }
        });

а это для перетаскивания

        tempImageView.setOnDragDropped(new EventHandler<DragEvent>() 
        {
            @Override
            public void handle(DragEvent event) 
            {
                System.out.print("OnDragDropped");
                Dragboard dashboard = event.getDragboard();

                if (dashboard.hasFiles()) 
                {
                    for (File file : dashboard.getFiles()) 
                    {
                        String absolutePath = file.toURI().toString();

                        Image dashBoardImage = new Image(absolutePath);
                        ImageView dbImageView = new ImageView();
                        dbImageView.setFitHeight(screenHeight/19);
                        dbImageView.setFitWidth(screenWidth*0.0225);
                        dbImageView.setImage(tempImage);
                        root.getChildren().add(dbImageView);
                        //TODO this needs to be changed to place onto pain instead of using set fill
                        //rectangle.setFill(new ImagePattern(dashBoardImage, 0, 0, 1, 1, true));
                        root.getChildren().add(dbImageView);
                    }

                    event.setDropCompleted(true);
                } else {
                    event.setDropCompleted(false);
                }
                event.consume();

            }
        });

1 Ответ

0 голосов
/ 30 октября 2018

Вам необходимо реализовать EventHandler для события OnDragDetected. В этом обработчике вам нужно вызвать метод startDragAndDrop для объекта, который будет перетаскиваться.

tempImageView.setOnDragDetected((event) -> {
    Image image;

    // Load your image and do other stuff.

    tempImageView.startDragAndDrop(TransferMode.ANY).setDragView(image);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...