SWT DragSource 和 DropTarget 托拉拽

SWT 托拉拽主要由3个部分组成

DragSource - 拖拉的来源封装在这个类当中

DropTarget - 粘贴的对象封装在这个类当中

Transfer - 他们之间传输的中介就靠这个

下面来看一下例子

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class DragAndDrog extends ApplicationWindow {
	private Text dropText;
	private Text dragText;

	/**
	 * Create the application window.
	 */
	public DragAndDrog() {
		super(null);
		createActions();
		addToolBar(SWT.FLAT | SWT.WRAP);
		addMenuBar();
		addStatusLine();
	}

	/**
	 * Create contents of the application window.
	 * @param parent
	 */
	@Override
	protected Control createContents(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);

		dropText = new Text(container, SWT.BORDER);
		dropText.setBounds(46, 48, 73, 21);

		DropTarget target = new DropTarget(dropText,DND.DROP_MOVE);
		target.setTransfer(new Transfer[]{TextTransfer.getInstance()});
		target.addDropListener(new DropTargetListener() {

			@Override
			public void dropAccept(DropTargetEvent event) {
				// TODO Auto-generated method stub

			}

			@Override
			public void drop(DropTargetEvent event) {
				// TODO Auto-generated method stub
				dropText.setText(String.valueOf(event.data));
			}

			@Override
			public void dragOver(DropTargetEvent event) {
				// TODO Auto-generated method stub

			}

			@Override
			public void dragOperationChanged(DropTargetEvent event) {
				// TODO Auto-generated method stub

			}

			@Override
			public void dragLeave(DropTargetEvent event) {
				// TODO Auto-generated method stub

			}

			@Override
			public void dragEnter(DropTargetEvent event) {
				// TODO Auto-generated method stub

			}
		});

		dragText = new Text(container, SWT.BORDER);
		dragText.setBounds(198, 48, 73, 21);

		DragSource dragSource = new DragSource(dragText, DND.DROP_MOVE);
		dragSource.setTransfer(new Transfer[]{TextTransfer.getInstance()});
		dragSource.addDragListener(new DragSourceListener() {

			@Override
			public void dragStart(DragSourceEvent event) {
				// TODO Auto-generated method stub

			}

			@Override
			public void dragSetData(DragSourceEvent event) {
				event.data = dragText.getText();

			}

			@Override
			public void dragFinished(DragSourceEvent event) {
				// TODO Auto-generated method stub

			}
		});

		return container;
	}

	/**
	 * Create the actions.
	 */
	private void createActions() {
		// Create the actions
	}

	/**
	 * Create the menu manager.
	 * @return the menu manager
	 */
	@Override
	protected MenuManager createMenuManager() {
		MenuManager menuManager = new MenuManager("menu");
		return menuManager;
	}

	/**
	 * Create the toolbar manager.
	 * @return the toolbar manager
	 */
	@Override
	protected ToolBarManager createToolBarManager(int style) {
		ToolBarManager toolBarManager = new ToolBarManager(style);
		return toolBarManager;
	}

	/**
	 * Create the status line manager.
	 * @return the status line manager
	 */
	@Override
	protected StatusLineManager createStatusLineManager() {
		StatusLineManager statusLineManager = new StatusLineManager();
		return statusLineManager;
	}

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			DragAndDrog window = new DragAndDrog();
			window.setBlockOnOpen(true);
			window.open();
			Display.getCurrent().dispose();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Configure the shell.
	 * @param newShell
	 */
	@Override
	protected void configureShell(Shell newShell) {
		super.configureShell(newShell);
		newShell.setText("New Application");
	}

	/**
	 * Return the initial size of the window.
	 */
	@Override
	protected Point getInitialSize() {
		return new Point(450, 300);
	}
}

  

时间: 2024-10-08 09:41:19

SWT DragSource 和 DropTarget 托拉拽的相关文章

Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结

Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的) 2 3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的) 2 4. 代码 3 5. 参考 5 1. 实现一个D&D操作一般包括三个步骤: 首先实现一个拖拽源,这个拖拽

ios基础知识--05

1.UIView的tag属性 /* 1.所有直接或者间接继承UIVIew的控件都有一个tag属性 2.这个属性,只能用来保存一个数字,对控件的外观没有任何影响 3.但是我们可以通过这个属性的值,来判断是哪个控件 */ 2.transform属性 /* 1. 可以使用动画,叫做变换 2. CGAffineTransformIdentity 如果赋值,那么之前通过transform属性进行的修改都会复原:_imageButton.transform= CGAffineTransformIdentit

【原创】关于职业发展

2016年过年ing,向往年一样无聊.... 也没有习惯写类似年终总结之类的东西,就是一闲下来就会多想点什么... 关于职业发展,其实几年前也迷茫过,那时是在一家美资半导体封装测试厂做MES的维护,一个叫PROMIS的系统,在半导体厂.电子厂比较常见,当时就是觉得做这个不是很有前途,尤其在西安这个地方.那时也自己学着做一些小应用(鄙人信管专业出身,学艺不精,科班应该做ERP顾问之类的),但是觉得这个MES一直做下去,在西安这个地方不是很有前途,同时也想转做软件开发,迷茫几个月之后还是选择离开.

一张图告诉你angular2所有知识点

忙活了半年,从angular2.0到现在angular4.2.从没AOT到有AOT.我想说,angular2的学习曲线真的有点陡峭.只能说,angular2是一个比较完整的框架,框架就是这样,一大堆条条框框,一个项目大了,就是靠这些条条框框来保持秩序. 关于之前的H5编辑器,很多人私信我,要么就是商业合作,要么就是要源码.我只想说,虽然那个编辑器是一个人搞的,但是,那时候我只是个打工的,也签了保密协议,爱莫能助.法律问题,本人不大懂,若是新写一个不会违法,我可以业余时间搞一个.违法就算了,等保密

【转】iOS自动布局进阶用法

原文网址:http://www.cnblogs.com/dsxniubility/p/4266581.html 本文主要介绍几个我遇到并总结的相对高级的用法(当然啦牛人会觉得这也不算什么). 简单的storyboard中上下左右约束,固定宽高啥的用法在这里就不做赘述了. autolayout自动布局是iOS6以后出现的,但是在开始的一段时间里大家并不怎么会用,都是一上来先勾掉.之后随着5s,iPhone6的出现屏幕多种多样.用多层if来判断尺寸已经完全hold不住了才开始学习自动布局. 在这之前

iOS自动布局高级用法及纯手码约束写法

本文主要介绍几个我遇到的总结的高级用法(当然我相信肯定有不少比这还高级的). 简单的storyboard中上下左右约束,固定宽高啥的用法在这里就不做赘述了. autolayout自动布局是iOS6以后出现的,但是在开始的一段时间里大家并不怎么会用,都是一上来先勾掉.之后随着5s,iPhone6的出现屏幕多种多样.用多层if来判断尺寸已经完全hold不住了才开始学习自动布局. 在这之前有个叫自动伸缩的autoresizing属性,这个主要用于一个控件和自己父控件之间的关系.只有autolayout

使用.NET进行高效率互联网敏捷开发的思考和探索【一、概述】

不知从什么时候开始,创业变得很廉价,谈什么都是互联网,动辄融资千万.这阵风好像也刮向了程序员中,有那么一大批开发者,数据结构不好好学习.数据库原理不扎实掌握,在github上发布几个项目,用nodejs创建一些服务,再用H5写出APP,就自以为迈入了高级程序员的队伍,能够运筹帷幄互联网项目,难道学习新技术.新理念就是快速成长吗,显然不完全是,在这浮躁的氛围中,各种粗制滥造的互联网网站.APP接踵而至,很多看似漂亮的APP,连简单的http接口安全都没有措施应对,很多美丽的响应式网站,目录结构随意

Python的pandas包的学习

一:pandas的数据类型 pandas中最重要的数据类型是Series序列 和 DataFrame数据框,Series相当于Numpy中的一维数组,不同之处series会自带索引值.dataframe相当于numpy的二维数组. 1.1)Series的创建---有两种方式:通过一维数组 和 字典 1)通过一维数组创建序列 OUT: 2)通过字典创建序列 OUT: 3)通过DataFrame的某一行或某一列创建序列 2.2)创建DataFrame 1) 通过二维数组创建 OUT: 2)通过字典列

react-dnd

介绍 React DnD 是一组 React 高阶组件,可以用来帮你构建复杂的拖拽接口,同时解耦你的组件.React DnD 非常适合像 Trello 和 Storify 这样的应用,在不同地方通过拖拽转移数据,而组件会改变它们的外观和应用的状态来响应拖拽事件. 基本用法 把应用的根组件包装在 DragDropContext 中 把可以拖拽的组件包装在 DragSource 中 设置 type 设置 spec,让组件可以响应拖拽事件 设置 collect,把拖拽过程中需要信息注入组件的 prop