树 - 拖放节点 - 刷新?

2023-12-09

我有一个与 smartgwt 树结构相关的问题。 我正在创建一棵树(称为nodesTree)具有来自数据库的值,并且每个节点都设置了一个名称。 例如,我有 4 个节点(数字是节点的名称):

1
  2
3
  4

for (TreeNode node : nodesTree.getAllNodes())
   System.out.print(node.getName());

Output: 1 2 3 4

如果我将节点 4 拖到节点 1 下(与 2 处于同一级别)

1
  2
  4
3

我想要节点的顺序:1 2 4 3但如果我重复上面的“for”语句,输出将与上面相同:1 2 3 4.

TreeGrid.refreshFields()不起作用。

我正在使用 smartgwt 2.4。

谢谢。

稍后编辑:

该树是手动填充的。我根据从数据库收到的一些值,从代码手动将节点添加到树中。

Tree nodesTree = new Tree();
TreeGrid navTreeGrid = new TreeGrid();
navTreeGrid.setData(nodesTree);
navTreeGrid.setCanReorderRecords(true); 
navTreeGrid.setCanReparentNodes(true);

后来编辑(2011 年 2 月 15 日):更多代码:

private static final String NAVPATH_ROOT = "/";

// Tree structure
Tree nodesTree = new Tree();
nodesTree.setRootValue(NAVPATH_ROOT);
nodesTree.setModelType(TreeModelType.PARENT);

TreeGrid navTreeGrid = new TreeGrid();
navTreeGrid.setCanReorderRecords(true);
navTreeGrid.setCanReparentNodes(true);
navTreeGrid.setData(nodesTree);

// add first node
TreeNode newNode = new TreeNode();
newNode.setName("a");
nodesTree.add(newNode, NAVPATH_ROOT);

// add the second node
newNode = new TreeNode();
newNode.setName("ab");
nodesTree.add(newNode, NAVPATH_ROOT);

// add the third node to the tree 
newNode = new TreeNode();
newNode.setName("abc");
nodesTree.add(newNode, NAVPATH_ROOT);

navTreeGrid.addDropHandler(new DropHandler()
{
   @Override
   public void onDrop(DropEvent event)
   {
      resetNodesAttributes();

    });

// I want in this method to have the order of nodes after drag&drop action was made.
// for example if I drag& drop node "abc" under "a" I want the method below to post  
// nodes in this order: a  abc  ab
public void resetNodesAttributes(){
    for (TreeNode node : nodesTree.getAllNodes()) {
       System.out.println("---:" + node.getName());
    }
}

稍后编辑:

我添加了一个DataChangedHandler to Tree像这样的小部件:

nodesTree.addDataChangedHandler(new com.smartgwt.client.widgets.tree.DataChangedHandler() 
{
   @Override
   public void onDataChanged(com.smartgwt.client.widgets.tree.DataChangedEvent dataChangedEvent) 
   {
        resetNodesAttributes();
   }
});

它工作正常,但是当我将示例节点“abc”拖放到节点“a”下时,输出为:

a  ab  a  abc  ab  a  abc  ab

所以,似乎该方法resetNodesAttributes它被调用了 3 次 - 我不希望这样 - 我只需要被调用一次。此外,节点的名称有时会发生变化,而且我不希望调用此方法。

稍后编辑(2月18日):

package de.vogella.gwt.helloworld.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
import com.smartgwt.client.types.TreeModelType;
import com.smartgwt.client.widgets.events.DropEvent;
import com.smartgwt.client.widgets.events.DropHandler;
import com.smartgwt.client.widgets.tree.Tree;
import com.smartgwt.client.widgets.tree.TreeGrid;
import com.smartgwt.client.widgets.tree.TreeNode;

public class HelloGwt implements EntryPoint {

    private static final String NAVPATH_ROOT = "/";
    Tree nodesTree = null;

    @Override
    public void onModuleLoad() {
        // Tree structure
        nodesTree = new Tree();
        nodesTree.setRootValue(NAVPATH_ROOT);
        nodesTree.setModelType(TreeModelType.PARENT);

        TreeGrid navTreeGrid = new TreeGrid();
        navTreeGrid.setCanReorderRecords(true);
        navTreeGrid.setCanReparentNodes(true);
        navTreeGrid.setData(nodesTree);

        // add first node
        TreeNode newNode = new TreeNode();
        newNode.setName("a");
        nodesTree.add(newNode, NAVPATH_ROOT);

        // add the second node
        newNode = new TreeNode();
        newNode.setName("ab");
        nodesTree.add(newNode, NAVPATH_ROOT);

        // add the third node to the tree 
        newNode = new TreeNode();
        newNode.setName("abc");
        nodesTree.add(newNode, NAVPATH_ROOT);

        navTreeGrid.addDropHandler(new DropHandler() {
            @Override
            public void onDrop(DropEvent event) {
                resetNodesAttributes(); 
            }
        });

        RootPanel.get().add(navTreeGrid);
    }

    public void resetNodesAttributes() {
        // here I want to have the new order of nodes after d&d action was made
        for (TreeNode node : nodesTree.getAllNodes()) {
           System.out.println(node.getName());
        }
    }

}

将你的输出包装在DeferredCommand,您将得到正确的输出。

public class HelloGwt implements EntryPoint 
{
  public void onModuleLoad() 
  {
    Tree tree = new Tree();
    tree.setModelType(TreeModelType.PARENT);

    final TreeGrid grid = new TreeGrid();
    grid.setCanReorderRecords(true);
    grid.setCanReparentNodes(true);
    grid.setData(tree);

    tree.add(createNode("a"), tree.getRoot());
    tree.add(createNode("b"), tree.getRoot());
    tree.add(createNode("c"), tree.getRoot());

    grid.addFolderDropHandler(new FolderDropHandler(){

    public void onFolderDrop(FolderDropEvent event)
    {
      DeferredCommand.addCommand(new Command()
      {
        public void execute()
        {
          for (ListGridRecord node : grid.getRecords()) 
            System.out.println(Tree.nodeForRecord(node).getName());
        }});
      }});


    RootPanel.get().add(grid);
  }

  private TreeNode createNode(String name)
  {
    TreeNode node = new TreeNode();
    node.setName(name);
    node.setID(name);
    return node;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树 - 拖放节点 - 刷新? 的相关文章

  • 量角器拖放:Angular 与 Angular with HTML5

    我在量角器测试中遇到了拖放问题 就像其他人一样 但一般情况下没有 仅在使用 HTML5 的角度应用程序中 为了演示 我使用两个演示拖放功能的网页编写了一个小型量角器测试套件 第一个页面 在第一个测试用例中使用 演示了 AngualarJS
  • Selenium WebDriver 拖放到滚动条

    我对 Selenium WebDriver 拖放有疑问 它不想拖放到滚动条中的 webelement 我试过这个 new Actions SeleniumDriver getDriver dragAndDrop element target
  • 创建二叉树的时间复杂度

    我正在尝试从提供的源创建一棵树 要添加到树中的 2 个节点 以及应添加这 2 个新闻节点的节点 为了找到该节点在树中的位置 我使用了中序遍历 该遍历的时间复杂度为 O n 因此 如果要在树中添加 n 个节点 则创建整个树的时间复杂度为 O
  • 如何从 QListWidget 拖放到 ComboBox 中

    目标是能够将 ListWidget 项目拖放到组合框上 掉落的项目应添加到组合框中 理想情况下 我们希望避免读取 listWidget 的 currentItem 或 selectedItems 等的任何技巧 有想法吗 from PyQt4
  • 二叉搜索树是平衡的吗?

    这已经讨论过了here https stackoverflow com questions 742844 how to determine if binary tree is balanced 但我在下面有一个实现 线程中从未讨论过 pub
  • 迭代多级提升树

    我的树看起来像这样 Library L ID 1 Book B ID 1 Title Moby Dick Book B ID 2 Title Jurassic Park Library L ID 2 Book B ID 1 Title Ve
  • 寻找成熟的 M-Tree 实现 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个成熟的 java M Tree 实现 甚至任何 M Tree 实现 除了我找到的唯一实现 http en wikipedia
  • 为什么在算法中使用子树大小来选择二叉树中的随机节点?

    我偶然发现了从二叉树中选择随机节点的算法的几种实现 它们都使用子树大小属性 但是 我不明白为什么知道子树大小有帮助 这是实现A https stackoverflow com a 32011526 and B https www geeks
  • NSCollectionView:仅接受项目之间的拖动,而不接受拖动

    我有一个NSCollectionView已实施且工作良好 然而 当 拖动项目来重新排列它们 我只想接受拖动 物体之间 当前的行为是您可以在对象之间拖动 它会打开一个 空间 而且over一个东西 我希望下面的图片能更好地说明问题 例如 将项目
  • Swift 中的拖放 - 注册拖动类型时出现问题?

    背景 我正在尝试在 Swift 中进行一些简单的拖放操作 类似于 Apple 的示例代码可可拖放 https developer apple com library mac samplecode CocoaDragAndDrop Intro
  • 将数据库结果转为数组

    我刚刚为组织查询分层数据的 闭包表 方式制作了更新 添加 删除部分 如本幻灯片第 70 页所示 http www slideshare net billkarwin sql antipatterns strike back http www
  • 自定义光标,无需库即可拖放 HTML 元素

    I have an HTML page which has some draggable elements Our specs say that hovering mouse on such element the cursor must
  • 在 WPF 中向上/向下移动 ListBoxItem

    我创建了一个包含文件名的列表框 我想为用户提供一个选项 可以使用上 下按钮并使用拖放来上下移动文件名 任何人都知道如何实现此功能 XAML 代码
  • 二叉树实现C++

    二叉树插入 include stdafx h include
  • 如何使用 d3.v4 中的 JSON 数据创建树布局 - 不使用 stratify()

    我正在尝试将一些 d3 代码从 v3 更新到版本 4 我有一个使用 JSON 数据的树形图 d3 v4 示例展示了如何使用 stratify 将表格数据 例如flare csv 转换为分层数据https bl ocks org mbosto
  • 用于更改向量中元素顺序的闪亮小部件

    在很多网站上 您都有一个拖放界面来更改列表中元素的顺序 我正在寻找类似的东西闪亮 我希望用户能够拖放列表中的元素 通过更改顺序来更改优先级 现在我有一个滥用的解决方案selectizeInput 这是可行的 但当选择列表变得更大时 它很快就
  • 如何在 macOS 上的 SwiftUI 中设置拖动图像

    我正在尝试更改 GridView 的默认拖放预览图像 该图像似乎包含网格中的所有可见项目 据我了解 我应该能够设置NSItemProvider previewImageHandler块来自定义所使用的图像 我似乎找不到任何关于返回自定义图像
  • JavaFX - Outlook 附件 - DnD

    您好 我需要一个 DnD 解决方案来将 Outlook 邮件附件拖到堆栈窗格中 JavaFX Outlook 2010 stackpaneDragAndDropZone setOnDragOver DragEvent event gt Dr
  • 在关系数据库中存储树结构的已知方法有哪些? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 XSLT 从平面 XML 列表构建树?

    我使用极简 MVC 框架 其中PHP控制器手上的DOM模型 to the XSLT 视图 c f okapi http okapi liip ch 为了构建导航树 我在 MYSQL 中使用了嵌套集 这样 我最终得到一个如下所示的模型 XML

随机推荐

  • ANTLR解析MismatchedTokenException

    我正在尝试为我正在编写的更简单的语言编写一个简单的解析器 它由后缀表达式组成 到目前为止 我的解析器遇到了问题 当我在输入上运行它时2 2 test gt gt 我收到 MismatchedTokenException 另外 我将如何实现递
  • foreach 不适用于 getElementsByTagName 创建的数组

    当我通过使用 document getElementsByTagName 收集网页中的按钮来创建数组时 我无法使用 forEach 对于前 var deleteButtons document getElementsByTagName bu
  • payU 支付网关 Android 集成中缺少哈希参数

    我需要在我的 Android 应用程序中集成 payU 支付网关 但是当应用程序尝试获取哈希密钥时 它给我错误消息 哈希参数丢失 在演示应用程序中 有两个选项可以生成哈希值 if null salt generateHashFromServ
  • 在 for 循环中使用 ggarrange 排列多个绘图

    我想使用以下代码在一张图像中排列多个绘图 mydataframe lt data frame number1 sample 1 140 size 200 replace TRUE number2 sample 1 4000 size 200
  • 将输入流转换为对象列表

    我必须制作一个 jar 来访问 API 来获取人员详细信息列表 该列表基本上有四个字段 id 姓名 薪水 部门 我正在使用 apache httpclient 执行 get 请求 该请求在点击 API 时为我提供了一个 httpentity
  • 对组合框中的项目进行分组

    我有一个 ListView 其中包含两种类型的对象 单个对象和多个对象 单个是普通的 TextBlock 而多个是包含项目的 ComboBox 我试图对组合框中的项目进行分组 但没有成功 是否可以 或者我应该采取不同的方法 我想要实现的目标
  • Python 3.5 + PyQt5 到独立 exe

    我是编码新手 我需要将 py 文件转换为 exe 我尝试了 py2exe 但它不适用于 python 3 5 然后我尝试了pyinstaller 它起作用了 但是当我将PyQt5添加到程序中时 pyinstaller也失败了 我尝试了 nu
  • Ipython Notebook 和 Matplotlib:如何在 html div 中包装绘图?

    我想添加一些css到我的情节的一部分 具体来说 我想设置float left 我怎样才能在div中生成绘图 这样我就可以使用css控制它的布局 例如 对于代码 def simple plot ax None if ax is None fi
  • 用于多行标题的 JTable 标题文本换行(自定义 TableCellRenderer)

    如何获取多行 JTable 标题 其中标题列正确放大以适合某些文本 然后换行到新行 如下所示 目前搜索上述需求返回了很多解决方案 但没有一个真正解决问题 http www javarichclient com multiline colum
  • 为什么我要在 C 中按值传递函数参数?

    我正在通过我的一些 C 库来磨练我的 C 技能 在完成第一个工作实现之后 我现在正在检查代码以使其更加高效 目前我正在讨论通过引用或值传递函数参数的主题 我的问题是 为什么我要在 C 中按值传递任何函数参数 代码可能看起来更干净 但它不是总
  • Visual Studio 的 Eclipse 按键绑定

    有人有类似 VS 2005 的可用于 Eclipse 的键绑定方案吗 如何将其导入 Eclipse 的首选项 我只看到导出按钮 如何在 Eclipse 中安装 Visual Studio 键绑定 Helios 及以上版本 对于找到这篇文章的
  • 由于 ExtensionlessUrlHandler,WebAPI 重写规则失败

    我正在尝试使用 IIS 将请求从 ASP net MVC 4 应用程序重写到 ASP net MVC 4 WebApi 从客户端 我使用 ajax 回调服务器 然后我希望服务器重写请求以指向 webapi 站点 如果我能让它工作 这应该可以
  • Java中的同步方法和同步块有什么区别? [复制]

    这个问题在这里已经有答案了 Java 中的同步方法和同步块有什么区别 我一直在网上寻找答案 人们似乎对此很不确定 我的看法是 两者之间没有区别 除了同步块的范围可能更本地化 因此锁定的时间会更短 如果对静态方法加锁 那么加锁的对象是什么 类
  • Java 转换/类加载器问题

    这是问题的简化版本 SomeClass c SomeClass obj getSomeClassParent 并非总是如此 但有时会触发异常 org somepackage SomeClass can t be cast to org so
  • 在已编译的 Java 类中重写方法调用

    我想在解析编译的类文件时将对给定类的调用替换为对方法体内另一个类的调用 或者换句话说 是否有一种方法可以检测方法中给定类的使用情况 并使用类似的方法替换该方法的该部分javassist 例如 如果我有编译版本 class A public
  • Django loaddata 如何知道哪些字段构成自然键?

    我使用 Django 的 dumpdata 来保存数据并使用 loaddata 来重新加载它 我也在使用自然键 我的模型看起来与此类似 class LinkManager models Manager def get by natural
  • jQuery - Raphael - SVG - 基于自定义数据的选择器

    我已将自定义数据属性分配给添加到 Raphael 画布的一些圆圈 如下所示each loop marker data transaction transaction 如何在画布上找到具有相同交易数据值的元素 目前我有代码 var found
  • 如何在Python中实现接口?

    public interface IInterface void show public class MyClass IInterface region IInterface Members public void show Console
  • 为什么这个 constexpr 静态成员函数在调用时不被视为 constexpr? [复制]

    这个问题在这里已经有答案了 为什么是这样constexpr static成员函数 由 Nah评论 不被视为constexpr什么时候打电话 struct Item id enum Enum size position attributes
  • 树 - 拖放节点 - 刷新?

    我有一个与 smartgwt 树结构相关的问题 我正在创建一棵树 称为nodesTree 具有来自数据库的值 并且每个节点都设置了一个名称 例如 我有 4 个节点 数字是节点的名称 1 2 3 4 for TreeNode node nod