转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53023429

1 背景

给JavaFx中的TextField控件添加文件拖拽功能,即实现将文件或文件夹拖拽至TeuxtField中,TextField显示出相应的路径地址。

2 监听器

在JavaFX中关于拖放操作,可以设置这么几种事件监听器:

  • setOnDragDetected(new EventHandler());
    当你从一个Node上进行拖动的时候,会检测到拖动操作,将会执行这个EventHandler。

  • setOnDragEntered(new EventHandler());
    当你拖动到目标控件的时候,会执行这个事件回调。

  • setOnDragExited(new EventHandler());
    当你拖动移出目标控件的时候,执行这个操作。

  • setOnDragOver(new EventHandler());
    当你拖动到目标上方的时候,会不停的执行。

  • setOnDragDropped(new EventHandler());
    当你拖动到目标并松开鼠标的时候,执行这个DragDropped事件。

  • setOnDragDone(new EventHandler());
    当你拖动并松手的时候,执行Drag完成操作。

这里要注意的是,首先执行拖动,拖动到目标控件的时候,会首先执行DragEnter,这个只执行一遍。然后当你停留在目标控件上方的时候,会不停的指定DragOver操作。

大家依据实际操作对不同环节的拖拽动作进行取舍。

3 实现

首先创建一个TextField的单例类,类中提供了一个getTextFiled方法获取TextField对象。

/*** Created by loongshawn on 2016/11/3.** NOTE 路径输入框拖入事件*/
public class MyStyleTextField {private static MyStyleTextField uniqueInstance = null;private MyStyleTextField(){}public static MyStyleTextField getInstance(){if (uniqueInstance == null){uniqueInstance = new MyStyleTextField();}return uniqueInstance;}public TextField getTextFiled(){TextField textField = new TextField();textField.setOnDragOver(new DragOverEvent(textField));textField.setOnDragDropped(new DragDroppedEvent(textField));return textField;}}

接下来需要给这个TextField对象添加拖拽事件监听,即上述代码中的:

textField.setOnDragOver(new DragOverEvent(textField));
textField.setOnDragDropped(new DragDroppedEvent(textField));

本例中只需要添加两个响应事件即:1、文件拖到控件上方;2、鼠标按钮松开

  • setOnDragOver(new EventHandler());
  • setOnDragDropped(new EventHandler());

具体事件监听代码:

/*** Created by loongshawn 2016/11/3.** NOTE 文件拖到控件上方事件*/
public class DragOverEvent implements EventHandler<DragEvent> {private TextField textField;public DragOverEvent(TextField textField){this.textField = textField;}public void handle(DragEvent event) {if (event.getGestureSource() != textField){event.acceptTransferModes(TransferMode.ANY);}}
}/*** Created by loongshawn 2016/11/3.** NOTE 文件拖到控件上方,鼠标松开事件*/
public class DragDroppedEvent implements EventHandler<DragEvent> {private static final Logger logger = Logger.getLogger(DragDroppedEvent.class);private TextField textField;public DragDroppedEvent(TextField textField){this.textField = textField;}public void handle(DragEvent event) {Dragboard dragboard = event.getDragboard();if (dragboard.hasFiles()){try {File file = dragboard.getFiles().get(0);if (file != null) {textField.setText(file.getAbsolutePath());}}catch (Exception e){logger.debug(e.toString());}}}
}

相关文章:

  • 《 利用JavaFx开发RIA桌面应用-TableView操作》
  • 《 利用JavaFx开发RIA桌面应用-Clipboard剪贴板操作》
  • 《利用JavaFx开发RIA桌面应用-TextField替换PasswordField做密码框》
  • 《利用JavaFx开发RIA桌面应用-半透明界面设计》
  • 《利用JavaFx开发RIA桌面应用-加载等待界面设计》
  • 《利用JavaFx开发RIA桌面应用-文件拖拽》
  • 《利用JavaFx开发RIA桌面应用-改变stage的标题栏的图标》
  • 《利用JavaFx开发RIA桌面应用-事件监听》
  • 《利用JavaFx开发RIA桌面应用-ComboBox组合编辑框水平增长》
  • 《利用JavaFx开发RIA桌面应用-布局说明》
  • 《利用JavaFx开发RIA桌面应用-在线资料》

利用JavaFx开发RIA桌面应用-文件拖拽相关推荐

  1. 利用JavaFx开发RIA桌面应用-在线资料

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/52805751 1.前言 虽说java已经不是主流的桌面应 ...

  2. 利用JavaFx开发RIA桌面应用-构架思路

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53174058 背景 最近在给公司其他部门开发桌面应用,起 ...

  3. PyQt开发实战: 利用QToolBox开发的桌面工具箱

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列 ...

  4. 【项目技术点总结之一】vue集成d3.js利用svg加载图片实现缩放拖拽功能

    [项目技术点总结之一]vue集成d3.js利用svg加载图片实现缩放拖拽功能 前言 概述 技术介绍 实现过程 插件安装 引用组件 初始化组件 实现效果 简单理解 使用d3创建一个svg 在svg中提添 ...

  5. VB 窗体实现文件拖拽获取路径方法

    Private Sub Form_Load()     Form1.OLEDropMode = 1 End Sub Private Sub Form_OLEDragDrop(Data As DataO ...

  6. html5之多文件拖拽上传预览

    最近对于html5预览功能很是感兴趣,特地拿出来研究一小下,并以一个小项目举例讲解. h5中的input有个type=file 就是文件上传控件,有个属性multiple就是h5新增的支持多选上传文件 ...

  7. js控制文件拖拽,获取拖拽内容。

    在用户拖拽文件到浏览器的某个元素上时,js可以监听到与拖拽相关的事件,并对拖拽结果进行处理,本文讨论下和拖拽文件相关的一些问题,不过没有处理太多关于兼容性的问题. 拖拽事件 js能够监听到拖拽的事件有 ...

  8. 收藏个支持进度条与文件拖拽上传的js File Uploader

    File Uploader:支持进度显示与文件拖拽的多文件上传前端JS脚本 分类: JavaScript 2012-03-11 19:20 2028人阅读 评论(11) 收藏 举报 目录(?)[+] ...

  9. php拖拽上传_JS实现的文件拖拽上传功能示例

    本文实例讲述了JS实现的文件拖拽上传功能.分享给大家供大家参考,具体如下: www.ddpool.cn JS文件拖拽上传 div{ width: 300px; height: 300px; borde ...

最新文章

  1. 视觉稿与H5页面之间的终端适配
  2. 图像通道、Scalar、分离、合成通道
  3. response.setContentType()方法浅析
  4. 前缀和?or差分序列?
  5. 技校毕业是什么学历_技校毕业是什么学历
  6. C语言中不安全的函数
  7. blender, 创建多边形面片
  8. react登录页面_React 实现路由拦截
  9. c语言sqlist结构体,c语言里 sqlist
  10. 手把手带你手写SpringMVC,剑指优秀开源框架灵魂
  11. 如何做好网站内部优化
  12. java swing 等待框_java – 让用户使用Swing等待
  13. 二维码识别超级解决方案,工业级别
  14. 【转贴】谈谈企业经营管理中的八大黑洞
  15. maven添加ojdbc6
  16. python装逼代码_能够让你装逼的10个Python小技巧
  17. Excel知道身份证号码怎么快速提取出年龄
  18. EBS中如何实现简单的日记账导入
  19. 百度图片推广广告位怎么做,图片广告位如何投放
  20. kubernetes使用flannel网络插件服务状态显示CrashLoopBackOff

热门文章

  1. yj.微信小程序 接收蓝牙设备返回的16进制数据转为中文显示问题
  2. @RequestMapping注解
  3. Non-local U-Nets for Biomedical Image Segmentation
  4. 核磁数据分析学习笔记[01_Linux基础]
  5. 印度首富称成功研发国产 5G,堪比大跃进
  6. Maven知识点一览
  7. flume报错WARN clients.NetworkClient: Error while fetching metadata with correlation id
  8. 云计算实训总结_云计算·实训报告书.doc
  9. 计算机一级b证书图片p,只需两步,分分钟搞定证件照(内附福利)
  10. Roam Reserach 到底好在哪儿?