2013-01-11 69 views
4

我正在創建一個Tree,用戶可以使用gwt-dnd庫將TreeItem拖放到另一個TreeItem上。我讀過,我應該爲每個TreeItem設置一個小部件,並使該小部件可拖動和一個dropTarget。到目前爲止,即使只是拖動TreeItem,我也沒有取得任何成功。我也會得到一個'拖放未處理的異常'。我是否至少朝着正確的方向前進,還是有更好的方法來做到這一點?任何幫助是極大的讚賞!GWT拖放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

我會建議入門指南here

看那如何拖動和拖放功能添加到您的項目

你所缺少的是一個拖放區域。有些類實現了拖放控制器,你應該使用它們。有沒有地方可以拖沓的物品是沒有意義的。

您也可以通過實現對事件邏輯(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); 
    } 
0

無需使用gwt-dnd的例子。只需使用FocusPanel包裝TreeItem內容並使用其拖動事件處理程序即可。用你的例子:

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);