`
youngerbaby
  • 浏览: 115048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给eclipse viewer增加拖拽支持

阅读更多

在jface中的viewer体系中(顶层抽象类org.eclipse.jface.viewers.Viewer),继承自org.eclipse.jface.viewers.StructuredViewer类的所有类都支持拖拽。在eclipse插件开发过程经常会有drag and drop的需求,下面通过一个小例子来说明如何给一个viewer增加拖拽支持。

 

其实很简单,只要2步:

1. 实现自己的org.eclipse.swt.dnd.DragSourceAdapter(监听drag动作)

2. 调用Viewer的addDragSupport(int operations, Transfer[] transferTypes, DragSourceListener listener)方法。参数1表示drag and drop的操作类型,参数2表示drag所支持的Transfer类型(Transfer是swt提供的一种java数据和平台相关的数据的相互转换的机制),第三个参数就是DragSrourceAdapter的实现。

DragView是一个简单的eclipse view,主要有一个TreeView构成。

 

public class DragView extends ViewPart {
	
	private TreeViewer viewer;
	@Override
	public void createPartControl(Composite parent) {
		createTreeViewer(parent);
		this.initDragAndDrop();
	}

	@Override
	public void setFocus() {
		// TODO Auto-generated method stub

	}
	private void createTreeViewer(Composite parent) {
		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
		viewer.setContentProvider(new WidgetContentProvider());
		viewer.setLabelProvider(new WidgetLabelProvider());
		viewer.setInput(getViewSite());
		
	}
	protected void initDragAndDrop() {
		int ops = DND.DROP_COPY | DND.DROP_MOVE;
		Transfer[] transfers = new Transfer[] {
			TextTransfer.getInstance()	
		};
		TreeViewer viewer = this.getViewer();
		viewer.addDragSupport(ops, transfers, new WidgetDragAdapter(viewer));
		
	}

	public TreeViewer getViewer() {
		return viewer;
	}
	
	
}

 

initDragAndDrop()方法给TreeView添加了Drag支持。

public class DragAdapter extends DragSourceAdapter {
	private ISelectionProvider selectionProvider;

	public DragAdapter(ISelectionProvider selectionProvider) {
		this.selectionProvider = selectionProvider;
	}

	@Override
	public void dragSetData(DragSourceEvent event) {
		if(TextTransfer.getInstance().isSupportedType(event.dataType)) {
			event.data = getSelectedString();
			return;
		}
	}

		
}

 

DragAdapter非常简单,只要重写dragSetData方法将要传递的数据赋给event.data就可以了(还可以更复杂,这里只实现最基本的drag,可以参考Elcipse projects explore的实现)。

 

上面两个类实现了对一个Viewer的Drag支持,当然只有drag是不够的,需要有一个drop target来接受drag。上面的TreeView支持TextTransfer,其实任何一个支持接受TextTransfer的目标的view或者编辑器都可以作为drop target,比如wst的xml编辑器支持TextTransfer,因此可以直接从上面的viewer中向wst xml编辑器托文本。

 

  • 大小: 21.9 KB
  • 大小: 21.5 KB
分享到:
评论

相关推荐

    eclipse插件大全介绍.

    Eclipse是一款开源的、可扩展的集成开发环境(IDE),支持多种编程语言如Java、C/C++等,并且可以通过插件进行功能扩展。Eclipse的强大之处在于其丰富的插件生态系统,用户可以根据自己的需求安装不同的插件来增强...

    JFreeChartApplet演示示例源码(eclipse部署可用)

    5. **运行与调试**:在 Eclipse 中,可以使用内置的 Applet Viewer 进行预览和测试,也可以部署到本地或远程服务器,通过浏览器查看效果。 **三、示例代码分析** 在提供的 JFreeChartApplet 压缩包中,可能包含以下...

    Birt 报表的相关源码,共享给大家

    1. **设计环境**:基于Eclipse IDE的报表设计工具,允许用户通过拖拽方式创建复杂的报表布局,包括表格、图表、文本等元素,并支持数据绑定和脚本编写。 2. **运行时引擎**:负责处理报表的计算、数据查询和格式化...

    报表birt 的入门教程,简单实用

    BIRT基于Java技术,可以与Eclipse IDE无缝集成,支持在Web应用程序中生成和显示报表。本文旨在提供一份简洁实用的BIRT入门指南,帮助初学者快速掌握BIRT的基本操作和应用。 二、BIRT概述 BIRT主要由三部分组成:...

    jd反编译工具

    安装完成后,在Eclipse的"Package Explorer"或"Navigator"视图中,右键点击任何.class文件,选择"Open With" -> "JD Eclipse Viewer",即可查看源代码。 这两个工具的结合使用,为Java开发者提供了一套强大的逆向...

    Java反编译工具详解(4款主流反编译工具).pdf

    安装JadClipse时,需将下载的jar包放入Eclipse的dropins目录,然后在Eclipse的偏好设置中配置Jad路径,并将.class文件关联为JadClipse Class File Viewer。 2. **JD-GUI** JD-GUI是一款独立的Java反编译器,由...

    jd-gui和jd eclipse插件,以及使用说明

    4. **使用插件**:在Eclipse的包浏览器或项目导航器中,右键点击任何`.class`文件,选择"Open With" -> "JD Java Source Viewer"即可查看源码。 ### 离线升级包安装 如果你无法连接到互联网,可以通过`离线升级包...

    BIRT中文使用说明

    3. 在设计区,可以通过拖拽控件(如表格、文本、图片等)来布局报表。 4. 结构区显示报表的层次结构,可在此调整元素顺序。 5. 属性区用于设置所选元素的属性,如字体、颜色、大小等。 6. 大纲区则展示报表数据结构...

    GEF中文教程(以hello world为例)

    接下来可以根据具体需求进一步完善功能,如增加更多类型的图形元素、支持复杂的交互操作等。 - 对于初学者来说,理解GEF的基本概念以及如何搭建其基础结构是非常重要的第一步。随着实践经验的积累,将能够更加熟练地...

    birt中文使用说明

    BIRT是Eclipse基金会的一个项目,它提供了一个灵活的报表设计环境,支持多种数据源,包括关系数据库、XML、Web服务等。BIRT分为两大部分:设计时组件(Design-time)和运行时组件(Run-time)。设计时组件允许开发者...

    birt中文官方资料

    2. **设计环境**:基于Eclipse IDE的BIRT Report Designer,提供了一个图形化的界面,让用户可以通过拖拽方式设计报表布局,添加数据源、查询、图表、表格、文本等元素。 3. **数据模型**:在BIRT中,数据模型定义...

    Practical Data Analysis Reporting With BIRT.pdf

    **BIRT**(Business Intelligence and Reporting Tools)是基于Eclipse平台的一款开放源代码报表工具,由Eclipse基金会维护和支持。BIRT提供了一个完整的框架用于报表设计,同时还包括了一个运行时组件,用于将设计...

    LoopPageView

    它不仅支持常见的水平滑动,还增加了垂直滑动的功能,这使得开发者可以设计出更多样化的用户界面布局。通过自定义ViewGroup,开发者能够更好地控制布局的渲染和触摸事件的处理,以实现更复杂的行为。 Interpolator...

    Building Web Application with ArcGIS API for Flex - Moxie Zhang (ESRI Inc.)

    6. **增加交互性**:实现点击事件、拖动事件等用户交互功能,提高用户体验。 7. **测试与调试**:使用Flex调试工具进行调试,确保应用程序按预期工作。 8. **部署发布**:编译项目为SWF文件,并部署到Web服务器上。 ...

    Birt的一个简单小例子

    它由Eclipse基金会维护,是Eclipse IDE的一个插件,支持多种数据库,提供了丰富的图表类型和自定义报表设计能力,广泛应用于企业级的报表开发。 **Birt的工作原理** BIRT主要由两部分组成:Report Designer和...

    GEF 入门教程

    - 绑定手势:为图形元素绑定手势监听,如单击、拖拽等。 **六、学习资源** - GEF官方文档:提供详细的API参考和教程。 - Eclipse Community Wiki:包含大量关于GEF的实例和示例代码。 - 示例项目:参考开源项目,...

    birt报表使用经验谈

    BIRT是Eclipse基金会下的一个项目,它提供了一套完整的报表设计、生成和分发解决方案。BIRT支持多种数据源,包括数据库、XML、Web服务等,且具备丰富的图表类型和样式设置,使得开发者能够创建出专业且富有视觉吸引...

Global site tag (gtag.js) - Google Analytics