我正在创建一个树,用户可以通过使用gwt-dnd库将一个TreeItem拖放到另一个TreeItem上来移动TreeItems。我已经读过我应该为每个TreeItem设置一个小部件,并使该小部件可拖动并使用dropTarget。到目前为止,即使只是拖动一个TreeItem,我也没有取得任何成功。我也得到了一个'拖放未处理的例外'。我至少朝着正确的方向前进,还是有更好的方法来做到这一点?非常感谢任何帮助!
// Create the boundary panel
AbsolutePanel main = new AbsolutePanel();
main.setSize("500px", "500px");
// Create Tree and tree root
Tree tree = new Tree();
TreeItem root = new TreeItem();
root.setText("root");
// Create Label widget and construct treeItem from Label
Label itemLabel = new Label("item1");
TreeItem item = new TreeItem(itemLabel);
// Create DragController for the main panel, and make the Label widget draggable
PickupDragController dragController = new PickupDragController(main, true);
dragController.makeDraggable(item.getWidget());
// Add everything to root panel
root.addItem(item);
tree.addItem(root);
main.add(tree);
RootPanel.get().add(main);
答案 0 :(得分:0)
我建议使用入门指南here。
查看如何向项目添加拖放功能
你缺少的是掉落区域。有些类实现了drop控制器,你应该使用它们。拥有无法放下的拖拉物品毫无意义。
您还可以通过在事件上实现逻辑(OnDropStart等)来覆盖dnd的一些功能
重要!!!不要忘记将DropController注册到PickupDragController。
以下是来自dnd网站的示例
public AbsolutePositionExample(PickupDragController dragController) {
super(dragController);
addStyleName(CSS_DEMO_ABSOLUTE_POSITION_EXAMPLE);
// use the drop target as this composite's widget
AbsolutePanel positioningDropTarget = new AbsolutePanel();
positioningDropTarget.setPixelSize(400, 200);
setWidget(positioningDropTarget);
// instantiate our drop controller
absolutePositionDropController = new AbsolutePositionDropController(positioningDropTarget);
dragController.registerDropController(absolutePositionDropController);
}
答案 1 :(得分:0)
无需使用gwt-dnd。只需使用TreeItem
打包FocusPanel
内容并使用其拖动事件处理程序。使用您的示例:
Tree tree = new Tree();
TreeItem root = new TreeItem();
root.setText("root");
Label itemLabel = new Label("item1");
FocusPanel wrapper = new FocusPanel(itemLabel);
TreeItem item = new TreeItem(wrapper);
wrapper.getElement().setDraggable(Element.DRAGGABLE_TRUE);
wrapper.addDragStartHandler(new DragStartHandler() {
@Override
public void onDragStart(DragStartEvent event) {
GWT.log("Drag START!");
}
});
wrapper.addDragEndHandler(new DragEndHandler() {
@Override
public void onDragEnd(DragEndEvent event) {
GWT.log("Drag END!");
}
});
wrapper.addDragOverHandler(new DragOverHandler() {
@Override
public void onDragOver(DragOverEvent event) {}
});
wrapper.addDropHandler(new DropHandler() {
@Override
public void onDrop(DropEvent event) {
GWT.log("DROP!");
event.preventDefault();
}
});
root.addItem(item);
tree.addItem(root);