`
simen_net
  • 浏览: 306303 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【Ext-GWT(GXT)】TreePanel异步拖动处理方法

 
阅读更多

需求:

一、是个树(废话)

二、能拖动(再次废话)

三、异步处理(算个话)

 

首先用GXT来颗树(传送门:GXT的开发图文 )MBmClient是我定义的一个GWT的Module,extends BaseModelData

    // 部门列表树
    TreePanel<MBmClient> treeLieBiao = new TreePanel<MBmClient>(getLieBiaoStore());
    // 设置显示属性为 标题
    treeLieBiao.setDisplayProperty("BIAO_TI");
 

恩,不错。让它能够拖动吧

    final TreePanelDragSource source = new TreePanelDragSource(treeLieBiao);
    source.addDNDListener(new DNDListener());

    TreePanelDropTarget target = new TreePanelDropTarget(treeLieBiao);

    target.setAllowSelfAsSource(true); // 自己可以拖到自己
    target.setAllowDropOnLeaf(true); // 可以拖到叶子
    target.setFeedback(Feedback.INSERT); // 插入方式拖动
 

介个,异步拖动是个什么东西?

首先,他是异步的(^_^),就是说拖动的动作处理是在后台异步进行的,这里我们采用RPC来实现(传送门:GXT+SpringMVC构建方法)。

其次,前台需要根据处理的情况来进行拖动失败提示、拖动成功后的前台节点移动。

重要的是第二条,在以前在ExtJS中的我也碰到过,最后简单的刷新树了事。

要处理好这两条,首先是要找到拖动的相关事件,然后根据事件的执行情况来进行前台操作。

修改上面的代码如下:

    final StrongTreePanelDragSource source = new StrongTreePanelDragSource(treeLieBiao);
    source.addDNDListener(new DNDListener() {

      @Override
      public void dragStart(DNDEvent e) {
        MBmClient sel = treeLieBiao.getSelectionModel().getSelectedItem();
        if (sel == null) {
          e.setCancelled(true);
          e.getStatus().setStatus(false);
          return;
        }
        super.dragStart(e);
      }

    });

    TreePanelDropTarget target = new TreePanelDropTarget(treeLieBiao) {
      @Override
      protected void handleInsertDrop(DNDEvent event, TreeNode item, int index) {
        if (((MBmClient) item.getModel()).getClassName().equals("aaaa")) {
          source.removeSource();
          super.handleInsertDrop(event, item, index);
        } else {
          event.getStatus().setStatus(false);
        }
      }
    };

    target.setAllowSelfAsSource(true);
    target.setAllowDropOnLeaf(true);
    target.setAutoExpand(true);
    target.setFeedback(Feedback.INSERT);
 

StrongTreePanelDragSource.java

public class StrongTreePanelDragSource extends TreePanelDragSource {
  private List<TreeModel> sel;

  @SuppressWarnings({ "rawtypes" })
  public StrongTreePanelDragSource(TreePanel tree) {
    super(tree);
  }

  public void removeSource() {
    if (sel != null && sel.size() > 0) {
      for (TreeModel tm : sel) {
        ModelData m = (ModelData) tm.get("model");
        tree.getStore().remove(m);
      }
    }
  }

  @Override
  protected void onDragDrop(DNDEvent event) {
    if (event.getOperation() == Operation.MOVE) {
      sel = event.getData();
    }
  }
}

 

比较TreePanelDragSource.java中的方法

  @Override
  protected void onDragDrop(DNDEvent event) {
    if (event.getOperation() == Operation.MOVE) {
      List<TreeModel> sel = event.getData();
      for (TreeModel tm : sel) {
        ModelData m = (ModelData) tm.get("model");
        tree.getStore().remove(m);
      }
    }
  }
 

我在StrongTreePanelDragSource.java中重写了onDragDrop方法,不再前台直接删除拖动的节点,而是增加了一个removeSource方法,为的就是将这个方法暴露给TreePanelDropTarget来调用。

 

最后执行的过程就是TreePanelDropTarget的handleInsertDrop事件发生时,判断拖动目标的显示名称是否为"aaaa",是则拖动成功,并移除拖动节点,否则取消所有操作。

 

这里就可以在handleInsertDrop方法中调用RPC来进行异步的处理和判断了。

 

============总结的分割线============

 

GWT是个好东西,有的人说他效率底下,有的人说他代码优化。但是我觉得相对ExtJS这类拥有复杂的前台JS的程序来说,JS的开发过程远远痛苦于JAVA的开发过程。

 

最后,本人正在研究GXT,欢迎有兴趣的朋友一起合作。

 

 

分享到:
评论

相关推荐

    EXT-GWT(GXT) 2.2.4 JAVA API DOC chm 版

    GXT是EXT-GWT的简称,它提供了丰富的用户界面组件,允许开发者用Java代码来构建复杂的、桌面级的Web应用。EXT-GWT 2.2.4是该框架的一个版本,它包含了对Java API的详细文档,方便开发者查阅和学习。 此CHM版的API...

    搭建简单的EXT-GWT(GXT)的开发环境(四)ext-gwt(gxt)结合google map第三版开发

    EXT-GWT(GXT)是Sencha公司推出的一款强大的JavaScript库,用于构建富客户端的Web应用程序。它基于Google Web Toolkit (GWT),提供了丰富的UI组件和功能,使得开发者可以使用Java语言来编写前端代码,然后由GWT...

    EXT-GWT(GXT)2.2.3 API DOC.zip

    通过阅读EXT-GWT(GXT) 2.2.3 API DOC.chm,开发者可以了解每个类和方法的详细说明,包括参数类型、返回值、异常和使用示例,从而更好地理解和使用EXT-GWT库。同时,文档中的搜索功能使得开发者能够迅速找到所需信息...

    EXT-GWT(GXT) 2.2.5 JAVA API DOC chm 版

    EXT-GWT(GXT) 2.2.4 JAVA API DOC chm 版.完美的的搜索功能,支持全文检索。2011年11月制作。如果打不开,请选中它,点右键 看属性,选择解除锁定。别再抱怨打不开了。

    EXT-GWT 2.2.0 API DOC (gxt) chm版

    EXT-GWT 2.2.0 API DOC (gxt) chm 版 。 2010年10月制作。完美的搜索功能。如果打不开,请选中它,点右键 看属性,选择解除锁定。别再抱怨打不开了。

    搭建简单的EXT-GWT(GXT)的开发环境(三)gxt结合spring和hibernate进行数据操作

    EXT-GWT(GXT)是一种基于Google Web Toolkit (GWT) 的高级用户界面库,它提供了丰富的组件和样式,使得开发者能够构建出复杂的、企业级的Web应用。本篇文章将聚焦于如何在EXT-GWT中整合Spring框架和Hibernate ORM,...

    ext-gwt分页 鉴于网上关于ext-gwt的技术文章很少代码页很少本着开源的精神本人特地写了一个分页的组件供大家学习欢迎下载

    EXT-GWT,全称是Ext GWT,是Sencha公司推出的一个用于构建富客户端Web应用的JavaScript库。它基于Google的GWT(Google Web Toolkit)技术,提供了丰富的用户界面组件和强大的数据绑定机制,使得开发者可以使用Java...

    搭建简单的EXT-GWT(GXT)的开发环境

    EXT-GWT(GXT)是一种基于Google Web Toolkit (GWT)的开源JavaScript库,用于构建富客户端的Web应用程序。GXT提供了丰富的用户界面组件和样式,使得开发者能够创建出类似于桌面应用的用户体验。本文将详细介绍如何...

    gxt-2.1.1-gwt2 最新的

    gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2gxt-2.1.1-gwt2

    更新的ext-gwt选课系统

    【更新的ext-gwt选课系统】是一款基于EXT-GWT技术构建的在线选课平台,旨在提供高效、用户友好的选课体验。EXT-GWT(Ext GWT)是Sencha公司开发的一个强大的JavaScript库,它允许开发者使用Java语言来编写富互联网...

    EXT-GWT 2.2.3 API DOC (gxt) chm 版

    EXT-GWT 2.2.3 API DOC (gxt) chm 版,完美的的搜索功能,支持全文检索。2011年3月制作。如果打不开,请选中它,点右键 看属性,选择解除锁定。别再抱怨打不开了。

    EXT-GWT 2.2.2 API DOC (gxt) chm 版

    EXT-GWT 2.2.2 API DOC (gxt) chm 版 。 2011年3月制作。完美的搜索功能。 如果打不开,请选中它,点右键 看属性,选择解除锁定。别再抱怨打不开了。

    ext-gwt的下载非常好

    gxt的下载非常好,ext-gwt的下载非常好

    EXT-GWT 2.1.0 API Doc chm版(新版本已可用)

    EXT-GWT2.1.0 java api 文档 chm格式方便查找2010年7月制作 完美的搜索,支持全文检索功能。另新版本EXT-GWT2.2.0 java api 已可用请到http://download.csdn.net/source/2700814 下载

    EXT-GWT2.0.1 API DOC.chm(新版本已可用请看软件说明)

    EXT-GWT2.0.1 java api 文档 chm格式方便查找2009年9月制作 注意:请到下面网址下载新版本, 新版本解决了旧版的部分搜索问题,并且api升级到了2.1.0版,EXT-GWT2.1.0 java api 文档 chm格式 2010年7月制作,地址...

    Ext-Gwt(GWT)开发实例(整合Spring +Hibernate)

    标题 "Ext-Gwt(GWT)开发实例(整合Spring +Hibernate)" 涉及到的是一个实际项目开发的教程,其中结合了三个重要的技术框架:Google Web Toolkit (GWT),Spring 和 Hibernate。这个实例旨在展示如何在Web应用开发中...

    GWT EXT 教程全集

    " Gwt-Ext学习笔记之基础篇.doc "、" Gwt-Ext学习笔记之中级篇.doc "、" Gwt-Ext学习笔记之进级篇.doc "这三份文档,按照从基础到进阶的顺序,系统地介绍了EXT-GWT的使用技巧和实践案例。基础篇可能涵盖EXT-GWT的...

    ext gwt gxt初学教程

    ### ExtGWT、GWT与GXT初学教程:打造企业级富客户端Web应用 #### 构建初识:ExtGWT与GWT的协同工作 ExtGWT,作为GWT(Google Web Toolkit)的有力补充,旨在为Java开发者提供更为丰富、功能全面的组件库,从而构建...

    gwt-ext-tree

    3. **事件处理(Event Handling)**:在 GWT-Ext-Tree 中,你可以监听并处理各种树形控件的事件,如节点点击、展开、折叠等。这些事件可以触发相应的业务逻辑,实现更丰富的交互功能。 4. **样式和主题(Styles and...

Global site tag (gtag.js) - Google Analytics