【问题标题】:JavaFX Help implementing drag and dropJavaFX 帮助实现拖放
【发布时间】:2018-10-30 17:35:41
【问题描述】:

我正在做的是为一副牌中的每张牌创建一个图像视图。对于每个图像视图,我添加了两个事件 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();

            }
        });

【问题讨论】:

    标签: java user-interface javafx


    【解决方案1】:

    您需要为 OnDragDetected 事件实现 EventHandler。在此处理程序中,您需要在对象上调用 startDragAndDrop 方法,该对象将被拖动。

    tempImageView.setOnDragDetected((event) -> {
        Image image;
    
        // Load your image and do other stuff.
    
        tempImageView.startDragAndDrop(TransferMode.ANY).setDragView(image);
    });
    

    【讨论】:

    • 说setImageView没有为拖板定义?
    • 我犯了一个小错误。它应该是 setDragView。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2016-04-09
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多