Vaadin14 自定义网格拖放

问题描述

我有一个带有层次结构的 TreeGrid,我想为其添加拖放功能

我的问题是,我只想要两种类型的元素是可拖动的,并且只能将它们放入这两种类型和根元素中。

到目前为止,我只能通过在元素是不同类型的元素时返回 dragStartEvent 来设法只允许拖动这些元素。

但是当它是一个网格时,我如何自定义允许的 dropTargets?

现在用户可以将元素放在任何其他网格元素上,如果 dropTarget 不是所需的类型,我唯一能做的就是显示错误消息,但这不是一个好的解决方案,他们应该在拖动时看到不能在那里放置的物品。

解决方法

网格有一个拖放过滤器,您可以使用它来决定是拖放还是拖放。

void    setDragFilter(SerializablePredicate<T> dragFilter)
Sets the drag filter for this drag source.

void    setDropFilter(SerializablePredicate<T> dropFilter)
Sets the drop filter for this drag target.

请查看文档 https://vaadin.com/components/vaadin-grid/java-examples/drag-and-drop