Java 如何通过拖放将TreePanel的根节点添加到另一个TreePanel中?

Java 如何通过拖放将TreePanel的根节点添加到另一个TreePanel中?,java,gwt-ext,treepanel,Java,Gwt Ext,Treepanel,我想使用拖放将一棵树的根节点添加到另一棵树中。我用于此任务的示例位于以下URL: 请尽快帮助我。在同一链接中。给出了代码 public class TwoTreesSample implements EntryPoint { public void onModuleLoad() { Panel panel = new Panel(); panel.setBorder(false); panel.setPaddings(1

我想使用拖放将一棵树的根节点添加到另一棵树中。我用于此任务的示例位于以下URL:


请尽快帮助我。

在同一链接中。给出了代码

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);  
    }  
} 
公共类TwoTreeSample实现入口点{
moduleLoad()上的公共void{
面板=新面板();
专家组命令(错误);
面板.衬板(15);
//为nody drop样式创建表单
FormPanel FormPanel=新的FormPanel();
formPanel.订单(假);
formPanel.setHideLabels(真);
字段集字段集=新字段集(“下拉样式”);
字段集。设置宽度(420);
formPanel.add(字段集);
最终无线电移动无线电=新无线电();
moveRadio.setName(“dropstyle”);
moveRadio.setBoxLabel(“移动”);
moveRadio.setChecked(true);
添加(移动收音机);
最终收音机copyRadio=新收音机();
copyRadio.setName(“dropstyle”);
copyRadio.setBoxLabel(“副本”);
字段集。添加(copyRadio);
//创建源国家/地区树
最终树面板树面板=新树面板();
treePanel.setTitle(“国家”);
树面板设置动画(真);
treePanel.setEnableDD(真);
treePanel.setContainerScroll(真);
树面板setRootVisible(true);
树面板设置宽度(200);
树面板设置高度(400);
setSelectionModel(新的MultiSelectionModel());
最终XMLTreeLoader=新的XMLTreeLoader();
setDataUrl(“data/countries grouped.xml”);
loader.setMethod(Connection.GET);
loader.setRootTag(“国家”);
loader.setFolderTitleMapping(“@title”);
loader.setFolderTag(“大陆”);
loader.setLeaftTitleMapping(“@title”);
loader.setLeafTag(“国家”);
loader.setqtimping(@qtip”);
loader.setIconMapping(“@icon”);
AsyncTreeNode root=新的AsyncTreeNode(“国家”,加载器);
树面板setRootNode(根);
root.expand();
treePanel.expandAll();
//创建目标假期树
最终树面板tripTreePanel=新树面板();
tripTreePanel.setTitle(“行程计划器”);
tripTreePanel.setAnimate(真);
tripTreePanel.setEnableDD(真);
tripTreePanel.setContainerScroll(真);
tripTreePanel.setRootVisible(true);
tripTreePanel.设置宽度(200);
tripTreePanel.设置高度(400);
最终XMLTreeLoader三次加载程序=新XMLTreeLoader();
setDataUrl(“data/trip.xml”);
setMethod(Connection.GET);
tripLoader.setRootTag(“假期”);
tripLoader.setFolderIdMapping(“@title”);
tripLoader.setFolderTag(“跳闸”);
三次加载程序。设置qtipping(@qtip”);
tripLoader.setIconMapping(“@icon”);
setAttributeMappings(新字符串[]{“@trip”});
最终AsyncTreeNode tripRoot=新的AsyncTreeNode(“要访问的地方”,tripLoader);
tripTreePanel.setRootNode(tripRoot);
//添加处理移动/复制逻辑的trip tree侦听器
tripTreePanel.addListener(新的TreePanelListenerAdapter(){
公共void onRender(组件){
expand();
tripTreePanel.expandAll();
}  
公共布尔值DobeforeDedrop(TreePanel TreePanel,TreeNode目标,DragData DragData,
字符串点、DragDrop源、TreeNode dropNode、,
DropNodeCallback DropNodeCallback){
if(“true”.equals(target.getAttribute(“trip”)){
如果(copyRadio.getValue()){
TreeNode copyNode=dropNode.cloneNode();
Node[]childrends=copyNode.getChildNodes();
对于(int i=0;i
这是一个非常有趣的问题,但请详细说明您希望实现的目标。我没有使用XMLTreeLoader。但我已经在smart gwt上完成了。必须有某种方法允许拖放。试着找出一些方法,比如setCanDragRecordsOut()…您在上面的代码中做了哪些更改..我想这与示例的源代码中给出的相同,我已经在注释中写到setCanDragRecordsOut(布尔值)必须在那里。您可以将其应用到代码中。