⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draganddrop1.java

📁 SWTJFace篇项目源程序该项目包含 包含了Eclipse下构建swt的基本工程
💻 JAVA
字号:
package cn.com.chengang.swt;

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.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class DragAndDrop1 {
	private TextTransfer textTransfer = TextTransfer.getInstance();
	private Button sourceText;
	private Text targetText;

	public static void main(String[] args) {
		new DragAndDrop1().open();
	}

	private void open() {
		final Display display = Display.getDefault();
		final Shell shell = new Shell();
		shell.setSize(300, 100);
		// ---------创建窗口中的其他界面组件-------------
		// 创建窗口组件
		shell.setLayout(new FillLayout());
		sourceText = new Button(shell, SWT.NONE);
		sourceText.setText("HelloWolrd");
		new Label(shell, SWT.NONE);// 分隔区
		targetText = new Text(shell, SWT.BORDER);
		// --------- 拖动设置-----------------
		// 设置sourceText为拖拽源。允许数据被移动或复制
		DragSource source = new DragSource(sourceText, DND.DROP_MOVE | DND.DROP_COPY);
		source.setTransfer(new Transfer[] { textTransfer });// 设置传输载体为文本型
		source.addDragListener(new MyDragSourceListener());
		// 设置targetText为目标地
		DropTarget target = new DropTarget(targetText, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
		target.setTransfer(new Transfer[] { textTransfer });
		target.addDropListener(new MyDropTargetListener());
		// -----------------END------------------------
		shell.layout();
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	private class MyDragSourceListener implements DragSourceListener {
		// 判断是否允许拖拽。这里设定空字串时不允许拖拽
		public void dragStart(DragSourceEvent event) {
			Button button = getSource(event);// getSource是自定义方法
			if (button.getText().trim().equals(""))
				event.doit = false;
		}

		// 自定义方法,取得拖拽源组件
		private Button getSource(DragSourceEvent event) {
			DragSource source = (DragSource) event.widget;
			Button button = (Button) source.getControl();// 即sourceButton
			return button;
		}

		// 设定需要用Transfer传输的数据
		public void dragSetData(DragSourceEvent event) {
			if (textTransfer.isSupportedType(event.dataType)) {// 是否支持拖拽的数据类型
				Button button = getSource(event);
				event.data = button.getText();
			}
		}

		// 拖拽操作完成后执行此方法
		public void dragFinished(DragSourceEvent event) {
			if (event.detail == DND.DROP_MOVE) {// 如果是移动,则删除sourceText中的文字
				Button button = getSource(event);
				button.setText("");
			}
		}
	}

	private class MyDropTargetListener implements DropTargetListener {
		// 鼠标进入目标组件时调用此方法
		public void dragEnter(DropTargetEvent event) {
			// 默认为DND.DROP_DEFAULT,这里将其设为复制;按住Ctrl键为DND.DROP_COPY;按住Shift键为DND.DROP_MOVE。
			if (event.detail == DND.DROP_DEFAULT)
				event.detail = DND.DROP_COPY;
		}

		// 鼠标在目标组件范围时会不断调用此方法
		public void dragOver(DropTargetEvent event) {
			// 在此方法主要设置event.feedback,它的可能值有:
			// DND.FEEDBACK_EXPAND 使当前光标下的项展开,以便拖拽到子项上,仅用于树型组件。
			// DND.FEEDBACK_INSERT_AFTER 在某项处于光标下之后显示一个插入标记,仅用于表格和树型组件。
			// DND.FEEDBACK_INSERT_BEFORE 在某项处于当前光标下之前显示一个插入标记,仅用于表格和树型组件。
			// DND.FEEDBACK_NONE 什么也不做.
			// DND.FEEDBACK_SCROLL 使目标组件可以滚动,以便可以拖到当前看不见的项上,仅用于表格和树型组件。
			// DND.FEEDBACK_SELECT 使当前光标下的项被选中,仅用于表格和树型组件。
			event.feedback = DND.FEEDBACK_NONE;
		}

		// 当按下或放开辅助按键(如Ctrl, Shift)时调用此方法
		public void dragOperationChanged(DropTargetEvent event) {
			if (event.detail == DND.DROP_DEFAULT)
				event.detail = DND.DROP_COPY;
		}

		// 当鼠标离开目标组件时会调用此方法
		public void dragLeave(DropTargetEvent event) {}

		// 在完成拖拽操作,执行drop方法之前调用此方法。
		public void dropAccept(DropTargetEvent event) {}

		// 在完成拖拽操作时最后调用的方法
		public void drop(DropTargetEvent event) {
			if (textTransfer.isSupportedType(event.currentDataType)) {
				String str = (String) event.data;// 取出传输数据
				DropTarget target = (DropTarget) event.widget;
				Text text = (Text) target.getControl();// 即targetText
				text.setText(str);
			}
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -