GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(1)
来源:互联网 发布:seo pdf 编辑:程序博客网 时间:2024/05/14 14:03
Drag-Drop重构
我们现在针对RSSReader项目,使用Drag-Drop的Portal布局效果。下面就开始使用GXT内建好的DragSource和DropTarget。
首相,我们要做的是允许用户可以从NavPortlet中FeedList的里面拖拽一条feed,然后可以放置到FeedPortlet,接下来其feed的内容会自动的通过ItemGrid显示出来。
- RSSReaderConstants类,定义一个新的恒量——FEED_DD_GROUP用来作为drag-drop分组用的‘字符串组名’
public static final String FEED_DD_GROUP = "feedDDGroup";
- 在FeedList.onRender()方法里面,在add(feedList);之前加入如下代码——新建DragSource包装feedList,并且将其选中的object传入到DNDEvent(注意选中的可能是多个)。
DragSource source = new DragSource(feedList) {@Overrideprotected void onDragStart(DNDEvent event) {event.setData(feedList.getSelection());}};source.setGroup(RSSReaderConstants.FEED_DD_GROUP);add(feedList);//above
- 上面的代码中,还将source设置了group——FEED_DD_GROUP。
- 在FeedPortlet类中,新建一个方法onFeedsDropped()——此方法,会通过DNDEvent里取出其携带的objects。然后会根据objects的size生成相同size的ItemGrid,后续的操作就类似于FeedView里面的操作了。
private void onFeedsDropped(DNDEvent event) {List<BeanModel> beanModels = event.getData();for (BeanModel beanModel : beanModels) {Feed feed = beanModel.getBean();final ItemGrid itemGrid = new ItemGrid(feed);TabItem tabItem = new TabItem(feed.getTitle());tabItem.setId(feed.getUuid());tabItem.setData("feed", feed);tabItem.add(itemGrid);tabItem.addListener(Events.Select, new Listener<TabPanelEvent>() {@Overridepublic void handleEvent(TabPanelEvent be) {itemGrid.resetSelection();}});tabItem.setClosable(true);feedPanel.addTab(tabItem);}}
- 接下来是要完成DropTarget的定义部分。在FeedPortlet里面,我们在其onRender()方法里面处理,将FeedPortlet自己用DropTarget包装起来。
protected void onRender(Element parent, int index) {super.onRender(parent, index);DropTarget target = new DropTarget(this);}
- Override DropTarget.onDragDrop(DNDEvent event)方法,将event传入到先前定义的onFeedsDropped(event)方法里去
protected void onRender(Element parent, int index) {super.onRender(parent, index);DropTarget target = new DropTarget(this) {@Overrideprotected void onDragDrop(DNDEvent event) {super.onDragDrop(event);onFeedsDropped(event);}};}
- target设置好了之后,设置其属性——setOperation(),因为是默认是move操作,所以要修改为copy操作。在设置target的group
protected void onRender(Element parent, int index) {super.onRender(parent, index);DropTarget target = new DropTarget(this) {@Overrideprotected void onDragDrop(DNDEvent event) {super.onDragDrop(event);onFeedsDropped(event);}};target.setOperation(DND.Operation.COPY);target.setGroup(RSSReaderConstants.FEED_DD_GROUP);}
- 开始运行程序,效果图如下~~~~
- GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(1)
- GXT之旅:第八章:Portal&Drag-Drop——项目使用Portal重构(1)
- GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(2)
- GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(3)
- GXT之旅:第八章:Portal&Drag-Drop——项目使用Portal重构(2)
- GXT之旅:第八章:Portal&Drag-Drop——项目使用Portal重构(3)
- GXT之旅:第八章:Portal&Drag-Drop——拖拽(Drag-Drop)基本介绍
- GXT之旅:第八章:Portal&Drag-Drop——Portal的基本介绍
- Drag &Drop
- Drag & Drop
- DRAG & DROP
- Drag Drop
- 第五部分:Drop源(OLE drag&drop之旅)
- 第五部分:Drop源(OLE drag&drop之旅)
- Qt之drag and drop
- QTP之drag and drop
- QTP之drag and drop
- Android API之Drag&Drop
- INF Version Section详解
- Activity 、Intent深入解析
- 命名管道在WIN7下运行出错的解决方法
- 偶编写的软件 彻底删除文件(File Delete Absolutely) 1.03 已发布在国内6大软件下载网站,新增功能简介
- 用C#将汉字转为以字母开头的方法
- GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(1)
- Java读取Properties文件的六种方法
- JS常用代码笔记
- j今天
- UDP/IP 阻塞模式与非阻塞模式
- a 和&a 的区别
- 计算机网络 以太网 和令牌环网
- 简洁的数据结构
- 全面认识UML类图元素