2012-01-16 1 views
2

드래그 드롭을 사용하여 한 트리의 루트 노드를 다른 트리에 추가하려고합니다. 나는이 작업을 위해 사용하고있는 예는 다음 URL에 있습니다 :드래그 드롭을 통해 다른 TreePanel에 TreePanel의 루트 노드를 추가하는 방법은 무엇입니까?

http://gwt-ext.com/demo/#twoTrees

최대한 빨리 도와주세요.

+1

매우 흥미로운 질문이지만, 달성하고자하는 것이 무엇인지 자세히 설명해주십시오. –

답변

1

동일한 링크. 코드가 주어집니다.

public class TwoTreesSample implements EntryPoint { 

    public void onModuleLoad() { 
     Panel panel = new Panel(); 
     panel.setBorder(false); 
     panel.setPaddings(15); 

     //create form for nody drop style 
     FormPanel formPanel = new FormPanel(); 
     formPanel.setBorder(false); 
     formPanel.setHideLabels(true); 

     FieldSet fieldSet = new FieldSet("Drop style"); 
     fieldSet.setWidth(420); 
     formPanel.add(fieldSet); 

     final Radio moveRadio = new Radio(); 
     moveRadio.setName("dropstyle"); 
     moveRadio.setBoxLabel("Move"); 
     moveRadio.setChecked(true); 
     fieldSet.add(moveRadio); 

     final Radio copyRadio = new Radio(); 
     copyRadio.setName("dropstyle"); 
     copyRadio.setBoxLabel("Copy"); 
     fieldSet.add(copyRadio); 

     //create source countries tree 
     final TreePanel treePanel = new TreePanel(); 
     treePanel.setTitle("Countries"); 
     treePanel.setAnimate(true); 
     treePanel.setEnableDD(true); 
     treePanel.setContainerScroll(true); 
     treePanel.setRootVisible(true); 
     treePanel.setWidth(200); 
     treePanel.setHeight(400); 
     treePanel.setSelectionModel(new MultiSelectionModel()); 

     final XMLTreeLoader loader = new XMLTreeLoader(); 
     loader.setDataUrl("data/countries-grouped.xml"); 
     loader.setMethod(Connection.GET); 
     loader.setRootTag("countries"); 
     loader.setFolderTitleMapping("@title"); 
     loader.setFolderTag("continent"); 
     loader.setLeafTitleMapping("@title"); 
     loader.setLeafTag("country"); 
     loader.setQtipMapping("@qtip"); 
     loader.setIconMapping("@icon"); 

     AsyncTreeNode root = new AsyncTreeNode("Countries", loader); 
     treePanel.setRootNode(root); 
     root.expand(); 
     treePanel.expandAll(); 

     //create target vacation tree 
     final TreePanel tripTreePanel = new TreePanel(); 
     tripTreePanel.setTitle("Trip Planner"); 
     tripTreePanel.setAnimate(true); 
     tripTreePanel.setEnableDD(true); 
     tripTreePanel.setContainerScroll(true); 
     tripTreePanel.setRootVisible(true); 
     tripTreePanel.setWidth(200); 
     tripTreePanel.setHeight(400); 

     final XMLTreeLoader tripLoader = new XMLTreeLoader(); 
     tripLoader.setDataUrl("data/trip.xml"); 
     tripLoader.setMethod(Connection.GET); 
     tripLoader.setRootTag("vacations"); 
     tripLoader.setFolderIdMapping("@title"); 
     tripLoader.setFolderTag("trip"); 
     tripLoader.setQtipMapping("@qtip"); 
     tripLoader.setIconMapping("@icon"); 
     tripLoader.setAttributeMappings(new String[]{"@trip"}); 

     final AsyncTreeNode tripRoot = new AsyncTreeNode("Places to Visit", tripLoader); 

     tripTreePanel.setRootNode(tripRoot); 

     //add trip tree listener that handles move/copy logic 
     tripTreePanel.addListener(new TreePanelListenerAdapter() { 
      public void onRender(Component component) { 
       tripRoot.expand(); 
       tripTreePanel.expandAll(); 
      } 

      public boolean doBeforeNodeDrop(TreePanel treePanel, TreeNode target, DragData dragData, 
              String point, DragDrop source, TreeNode dropNode, 
              DropNodeCallback dropDropNodeCallback) { 
       if ("true".equals(target.getAttribute("trip"))) { 
        if (copyRadio.getValue()) { 
         TreeNode copyNode = dropNode.cloneNode(); 
         Node[] children = copyNode.getChildNodes(); 
         for (int i = 0; i < children.length; i++) { 
          Node child = children[i]; 
          copyNode.removeChild(child); 
         } 
         dropDropNodeCallback.setDropNode(copyNode); 
        } 
       } 
       return true; 
      } 
     }); 

     Panel horizontalPanel = new Panel(); 
     horizontalPanel.setLayout(new HorizontalLayout(20)); 
     horizontalPanel.add(treePanel); 
     horizontalPanel.add(tripTreePanel); 

     Panel verticalPanel = new Panel(); 
     verticalPanel.setLayout(new VerticalLayout(15)); 

     verticalPanel.add(formPanel); 
     verticalPanel.add(horizontalPanel); 

     panel.add(verticalPanel); 

     RootPanel.get().add(panel); 
    } 
} 
+1

XMLTreeLoader를 사용하지 않았습니다. 하지만 나는 그것을 똑똑하게 해냈다. 끌어서 놓기를 허용하는 몇 가지 방법이 있어야합니다. setCanDragRecordsOut() 같은 메서드를 찾으려고하십시오. – PVR

+0

위의 코드에서 변경 한 내용은 ... –

+0

예제의 소스에서 주어진 것과 같다고 가정합니다. 주석에 이미 작성한 setCanDragRecordsOut (부울 값)가 있어야합니다. 코드에 적용 할 수 있습니다. – PVR

관련 문제