Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的) 2
3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的) 2
1. 实现一个D&D操作一般包括三个步骤:
首先实现一个拖拽源,这个拖拽源和相应的组件是关联起来的
第二步实现一个拖拽目标,这个目标用来实现拖拽物的接收
第三步实现一个数据传输对象,该对象封装拖动的数据
_____________________ _____________________
| | | |
| DragSource Component| |DropTarget Component|
|_____________________| |____________________|
| |
|____________Transferable Data_________________|
Transferable 接口实现出的对象能够保证 DropTarget Component读懂拖拽过来的对象中包含的信息
如果是在同一个虚拟机中实现拖拽的话,DragSource Component会传递一个引用给DropTarget Component
但是如果在不同的JVM中或者是在JVM和本地系统之间传递数据的话我们就必须实现一个Transferable对象来传递数据
Transferable中封装的内容存放到DataFlavors,用户可以通过访问DataFlavors来获取数据
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的)
思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等),
在DragDrop事件中对“信息”进行解析。
窗体的AllowDrop属性必须设置成true;
且必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的)
private void Form1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Link; //重要代码:表明是链接类型的数据,比如文件路径
else e.Effect = DragDropEffects.None;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
string path = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
MessageBox.Show(path);
}
3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的)
这个功能AWT也提供了Swing话只是利用了这个,因为这和界面没什么关系。
在JAVA中使用拖拽功能
sun在java2中引入了一些新的方法来帮助实现拖拽功能,这些新的类在java.awt.dnd包中
JDK1.4开始对Swing的拖放功能做了简化,不同组件分别提供了拖放源和拖放目标,这里就讲用的最多的文本域,他既能拖入文本,也能将文本拖出,非常方便。
但默认这个功能没有启用,要手动调用setDragEnabled方法,使其生效。eg
4. 代码
---form ini()
class SetImgSoftlinkGener extends JFrame implements Iskin, DropTargetListener
frame.setDropTarget( new DropTarget(frame, DnDConstants.ACTION_COPY_OR_MOVE, this, true) );
@Override
public void dragEnter(DropTargetDragEvent dtde) {
System.out.println("=====enter drag enter ");
// Get the type of object being transferred and determine
// whether it is appropriate.
// checkTransferType(dtde);
// Only accept a list of files
boolean acceptableType = dtde
.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
// Accept or reject the drag.
// acceptOrRejectDrag(dtde);
int dropAction = dtde.getDropAction();
int sourceActions = dtde.getSourceActions();
boolean acceptedDrag = false;
// Reject if the object being transferred
// or the operations available are not acceptable.
if (!acceptableType
|| (sourceActions & DnDConstants.ACTION_COPY_OR_MOVE) == 0) {
// DnDUtils.debugPrintln("Drop target rejecting drag");
dtde.rejectDrag();
} else if ((dropAction & DnDConstants.ACTION_COPY_OR_MOVE) == 0) {
// Not offering copy or move - suggest a copy
// DnDUtils.debugPrintln("Drop target offering COPY");
dtde.acceptDrag(DnDConstants.ACTION_COPY);
acceptedDrag = true;
} else {
// Offering an acceptable operation: accept
// DnDUtils.debugPrintln("Drop target accepting drag");
dtde.acceptDrag(dropAction);
acceptedDrag = true;
}
// return acceptedDrag;
}
@Override
public void drop(DropTargetDropEvent dtde) {
System.out.println("=====enter drag drop... ");
// Check the drop action
if ((dtde.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0) {
// Accept the drop and get the transfer data
dtde.acceptDrop(dtde.getDropAction());
Transferable transferable = dtde.getTransferable();
System.out.println("");
try {
List<File> fileList = (List) transferable
.getTransferData(DataFlavor.javaFileListFlavor);
//fileList.getClass().toString();
//String path = fileList[0].getPath();
String path=fileList.get(0).getPath();
MsgBox.setTxt(path);
System.out.println(path);
} catch (UnsupportedFlavorException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// dtde.dropComplete(result);
// dtde.rejectDrop();
}
}
5. 参考
在JAVA中使用拖拽功能 - gudong2945的专栏 - 博客频道 - CSDN.NET.htm
(impt )swing实现拖拽效果(将本地文件拖拽到程序的文本框中显示内容) - java学习交流 - 博客频道 - CSDN.NET.htm
疯狂JAVA讲义---第十二章:Swing编程(三)拖放功能 - TERRY的技术日志 - 博客频道 - CSDN.NET.htm
( 有点用 )java的Drag and Drop(拖拽)简单例子_javase吧_百度贴吧.htm
(简单 ) Java Swing GUI文件拖拽 - 从明白的那一刻,还不晚,启航。 - 博客频道 - CSDN.NET.htm
C#.net拖拽实现获得文件路径 - attilax的专栏 - 博客频道 - CSDN.NET.htm
WinForm的鼠标拖拽功能(C#)
C#中的拖放操作 - fumingkui@126的日志 - 网易博客.htm
winform(C#)拖拽实现获得文件路径_.NET教程网——简单专业的.NET技术网站.htm
Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结的更多相关文章
- atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结
atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...
- HTML5 drag & drop 拖拽与拖放简介
DataTransfer 对象:退拽对象用来传递的媒介,使用一般为Event.dataTransfer. draggable 属性:就是标签元素要设置draggable=true,否则不会有效果,例如 ...
- HTML5 drag & drop 拖拽与拖放
关键词: 1. draggable:规定元素是否可拖动的,draggable=true可拖动 2. dataTransfer:拖拽对象用来传递的媒介,使用方式:event.dataTransfer 3 ...
- RCP:拖拽功能的实现 Drag and Drop
SWT中的拖拽是使用的org.eclipse.swt.dnd. 有三个需要密切注意的类: 1.DragSource 2.DropTarget 3.Transfer DragSource封装了需要被拖拽 ...
- canvas drag 实现拖拽拼图小游戏
博主一直心心念念想做一个小游戏- 前端时间终于做了一个小游戏,直到现在才来总结,哈哈- 以后要勤奋点更新博客! 实现原理 1.如何切图? 用之前的方法就是使用photoshop将图片切成相应大小的图 ...
- JQuery UI的拖拽功能
JQuery UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量 ...
- JQuery UI的拖拽功能实现方法小结
JQuery UI提供的API极大简化了拖拽功能的开发.只需要分别在拖拽源(source)和目标(target)上调用draggable和droppable两个函数即可. 拖拽原理 首先要明确几个概念 ...
- PCB Winform中的WebBrowser扩展拖放(拖拽)功能 实现方法
我们在Winform支持网页通常增加WebBrowser控件实现,相当于内嵌浏览器浏览网页使用, 而此WebBrowser默认情况是文件拖入功能是不支持的, 如何才能支持呢.在这里介绍如何实现方法 一 ...
- bcb ole拖拽功能的实现
最近项目中用到了OLE 拖拽功能 和BCB 一个Form的Drag 不同的是,只有实现了OLE 拖拽才能,从其他程序拖拽数据到Form 下面的代码实现了,同HTML网页拖拽到Form时,Form获得H ...
随机推荐
- Silverlight:《Pro Silverlight5》读书笔记 之 Dependency Properties And Routed Event
Dependency Properties And Routed Event Dependency Properties Dynamic Value Resolution As you’ve alre ...
- C语言之动态分配内存
1. malloc()函数和free()函数 首先,我们应该知道.所有的程序都必须留出足够的内存空间来存储所使用的数据,所以我们常常会预先给程序开辟好内存空间,然后进行操作,但事实上另一种选择,能够让 ...
- ActiveMQ使用示例之Topic
非持久的Topic消息示例 对于非持久的Topic消息的发送基本跟前面发送队列信息是一样的,只是把创建Destination的地方,由创建队列替换成创建Topic,例如: Destination d ...
- 如何获取Android唯一标识(唯一序列号)
有很多场景和需求你需要用到手机设备的唯一标识符. 在Android中,有以下几种方法获取这样的ID. 1. The IMEI: 仅仅只对Android手机有效: 1 2 TelephonyManage ...
- Java:Object类详解
Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的.例如,新手可能不会理解Object类.这篇文章分成三个部分讲跟Object类及其方法有关的问题. 上帝类 问:什么是Obj ...
- Cocos2d-X中的动作特效
Cocos2d-X中提供了很丰富的动作特效 比如:网格动画 扭曲特效 3D瓷砖波动特效 程序代码: #include "ActionEffect.h" #include " ...
- Thinkphp学习笔记-模板主题
一个模块如果需要支持多套模板文件的话,就可以使用模板主题功能. 默认情况下,没有开启模板主题功能,如果需要开启,设置 DEFAULT_THEME 参数即可: // 设置默认的模板主题 'DEFAULT ...
- 华为E392-u92在 linux 2.6.34 内核环境下支持
还是先说说思路吧.网关需要支持4G LTE网卡.如之前的操作,插上网卡后,usb-modeswitch 后没有产生对应的/dev/ttyUSB0-2. 所以ppp拨号脚本等无法工作.这里在ubuntu ...
- 使用Bootstrap3和Ladda UI实现的多种按钮“加载中”效果体验
在线演示 在线演示 大家在开发基于web的网站或者web应用中,常常在AJAX调用的过程中需要提示用户并且展示相关的“加载中”效果,类似的UI设计也非常多,比如,当点击一个按钮后,在它的旁边显示一个 ...
- android中可以使用bitmap的平铺,镜像平铺等减小图片带来的apk过大的问题
bitmap的平铺.镜像drawable文件夹中新建bitmap,其中的tileMode属性 tileMode 属性就是用于定义背景的显示模式: disabled 默认值,表示不使用平铺 cla ...