当前位置: 首页 > 知识库问答 >
问题:

JavaFX帮助实现拖放

江鹏飞
2023-03-14

我正在做的是为一副牌中的每张牌创建一个图像视图。对于每个图像视图,我添加了两个事件setOnDragOver和setondragdroped。然而,当我点击并试图拖动一张卡片时,我的活动打印声明甚至没有显示。

我试图做的是允许在窗格上拖动一张卡。因此,根据我拖动它的位置更改位置,但它仍然在窗口上。下面是图像视图的事件。

        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个答案

荆鸿畅
2023-03-14

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

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

    // Load your image and do other stuff.

    tempImageView.startDragAndDrop(TransferMode.ANY).setDragView(image);
});
 类似资料:
  • 当使用钢笔工具时,很难绘制路径,除非画布上有锚点。从 Illustrator CC 2014 版开始,“钢笔工具”会显示路径预览,即前一个锚点到指针当前位置的绘制路径。 使用钢笔工具单击一次画板绘制平滑点,并拖动鼠标以按要求创建手柄。 注意:当您使用钢笔工具绘制平滑点时,反向手柄始终相等且成对。拖动平滑点手柄时按住 Cmd/Ctrl 可创建长度不等的手柄(配对保持不变)。 松开鼠标按钮。当您在画板

  • 记住命令,特别是命令的用法挺难,不同的命令都有各自的可以使用的参数。一般的命令都支持 --help 参数,它会为你显示命令的帮助信息,比如可用的参数,参数的作用等等。或者也可以使用 man 命令查看命令的帮助手册。 查看帮助,例如看一下 curl 命令的帮助信息: curl --help 返回信息截取: Usage: curl [options...] <url> Options: (H) me

  • Object: JSON JSON解码器和编码器。 JSON Method: encode 转换一个对象或数组为JSON字符串。 语法: var myJSON = JSON.encode(obj); 参数: obj - (object) 转换为字符串的对象。 返回: (string) JSON字符串。 示例: var fruitsJSON = JSON.encode({apple: 'red',

  • 我在一个JPanel中有3个组件,其中GridBagLayout是JPanel的LayoutManager,并在这3个组件上使用GridBagConstraints。 使用当前代码(如下所示),3个元素会正确地出现在面板上。问题是第一个组件是一个JLabel,它有时很长,如果是这样的话,它就会扩展,使其他两个组件变小。 我的目标是拥有一个GridBagLayout为1行4列的JPanel,其中第一

  • 帮助教程 帮助文档        LSV帮助文档详细介绍里产品的使用及操作,极大的方便了用户对的LSV的使用。 点击链接了解详情 视频教程        业内资深人士录制了相关教学视频,不仅对软件进行了介绍,也对行业的相关概念和知识点进行了深入的分析和解释,欢迎大家观看! 点击链接了解详情 博客        LSV的博客里有一系列的关于LSV的FAQ以及一些问题的解决方案,并且可以进行关键词的搜

  • 本文向大家介绍winforms 使用帮助类显示帮助,包括了winforms 使用帮助类显示帮助的使用技巧和注意事项,需要的朋友参考一下