问题描述:

  在listview的item里面添加鼠标拖拽排序功能。代码如下:

 setOnMouseDragged(event -> {
//设定鼠标长按0.3秒后才可拖拽 防止误操作
isCanDrag =true; //(System.currentTimeMillis() - mousedownMills) > 300;
});
setOnDragDetected(event -> {
if (this.getTestAction() == null && !this.isScreenshotStep || !isCanDrag) {
return;
}
scriptShowController.listView.getSelectionModel().clearSelection();
scriptShowController.listView.getSelectionModel().select(items.indexOf(this));
//开始拖拽
Dragboard dragboard = startDragAndDrop(TransferMode.MOVE);
//当前步骤截图
WritableImage snapshot = this.getParent().snapshot(new SnapshotParameters(), null);
ImageView ig= new ImageView(snapshot);
// ig.setOnScroll(e->{
// double deltaY = e.getDeltaY();
// log.info("item:"+deltaY);
// });
// javafx.scene.Node s= ((javafx.scene.Node)event.getSource());
// javafx.scene.Node t= (javafx.scene.Node)event.getTarget();
// if(s!=null) {
// s.setOnScroll(e -> {
// double deltaY = e.getDeltaY();
// log.info("S:" + deltaY);
// });
// }
// if(t!=null) {
// t.setOnScroll(e -> {
// double deltaY = e.getDeltaY();
// log.info("T:" + deltaY);
// });
// }
dragboard.setDragView(ig.getImage());
ClipboardContent content = new ClipboardContent();
content.putString(String.valueOf(items.indexOf(this)));
dragboard.setContent(content);
event.consume(); }); //拖拽经过的item设置TransferMode
setOnDragOver(event -> {
if (this.getTestAction() == null && !this.isScreenshotStep) {
return;
}
if (!event.getDragboard().getString().equals(String.valueOf(items.indexOf(this))) &&
event.getDragboard().hasString()) {
event.acceptTransferModes(TransferMode.MOVE);
}
event.consume();
});
//拖拽进入Item时设置透明度0.3
setOnDragEntered(event -> {
if (!event.getDragboard().getString().equals(String.valueOf(items.indexOf(this))) &&
event.getDragboard().hasString()) {
setOpacity(0.3);
log.info("setOnDragEntered");
}
});
//拖拽离开Item时设置为不透明
setOnDragExited(event -> {
if (!event.getDragboard().getString().equals(String.valueOf(items.indexOf(this))) &&
event.getDragboard().hasString()) {
setOpacity(1);
log.info("setOnDragExited");
}
}); //拖拽放下时的相关逻辑
setOnDragDropped(event -> {
if (this.getTestAction() == null && !this.isScreenshotStep) {
return;
}
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
//调整Item的位置
StepItemController dragItem = (StepItemController) event.getGestureSource();
int draggedIdx = items.indexOf(dragItem);
int thisIdx = items.indexOf(this);
if (draggedIdx != thisIdx) {
items.remove(draggedIdx);
items.add(thisIdx, dragItem);
//更新角标
this.scriptShowController.getLogic().updateStepIndexs();
//更新TestAction顺序
SingleTestCase.getInstance().dragActions(draggedIdx, thisIdx);
if (UIController.getScriptShowController() != null) {
UIController.getScriptShowController().setSaveScript(true);
}
UndoRedoUtil.addDragUndo(draggedIdx, thisIdx);
}
scriptShowController.listView.getSelectionModel().clearSelection();
scriptShowController.listView.getSelectionModel().select(thisIdx);
success = true;
}
setOpacity(1);
isCanDrag = false;
event.setDropCompleted(success);
event.consume();
log.info("setOnDragDropped");
}); setOnDragDone(DragEvent::consume);

windows上当点击左键拖拽期间,无法滚动鼠标滑轮实现listview的滚动条上下滚动。在mac上可以自动实现。

问题解决思路:

第一种思路,监视setOnScroll((ScrollEvent event)事件,但是无法实现上诉问题,拖拽期间无法监视鼠标滑轮滚动。代码如下:

//        for (javafx.scene.Node node: this.scriptShowController.listView.lookupAll(".scroll-bar")) {
// if (node instanceof javafx.scene.control.ScrollBar) {
// final javafx.scene.control.ScrollBar bar = (javafx.scene.control.ScrollBar) node;
// bar.valueProperty().addListener(new javafx.beans.value.ChangeListener<Number>() {
// @Override
// public void changed(javafx.beans.value.ObservableValue<? extends Number> value, Number oldValue, Number newValue) {
// log.info(bar.getOrientation() + " " + newValue);
// }
// });
// }
// }
// setOnScroll((ScrollEvent event) -> {
// double deltaY = event.getDeltaY();
// log.info("item:"+deltaY);
// });

第二种思路,设想在拖拽期间有一个层次,在该层次添加监视,但是无效。代码如下:

//            ig.setOnScroll(e->{//DragView的层次
// double deltaY = e.getDeltaY();
// log.info("item:"+deltaY);
// });
// javafx.scene.Node s= ((javafx.scene.Node)event.getSource());
// javafx.scene.Node t= (javafx.scene.Node)event.getTarget();
// if(s!=null) {
// s.setOnScroll(e -> {
// double deltaY = e.getDeltaY();
// log.info("S:" + deltaY);
// });
// }
// if(t!=null) {
// t.setOnScroll(e -> {
// double deltaY = e.getDeltaY();
// log.info("T:" + deltaY);
// });
// }

问题记录:JavaFx 鼠标滑轮滚动事件监听!的更多相关文章

  1. java鼠标与键盘事件监听

    package cn.stat.p3.windowdemo; import java.awt.Button; import java.awt.FlowLayout; import java.awt.F ...

  2. js鼠标滑轮滚动事件绑定(兼容主流浏览器)

    /** Event handler for mouse wheel event. *鼠标滚动事件 */ var wheel = function(event) { var delta = 0; if ...

  3. WebView使用详解(二)——WebViewClient与常用事件监听

      登录|注册     关闭 启舰 当乌龟有了梦想……       目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8 ...

  4. js判断鼠标滑轮滚动方向并根据滚动的方向触发不同的事件

    <script> var scrollFunc = function (e) { var direct = 0; e = e || window.event; if (e.wheelDel ...

  5. java 事件监听 - 鼠标

    java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...

  6. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

  7. 利用JavaFx开发RIA桌面应用-事件监听

    1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...

  8. PIE SDK地图鼠标事件监听

    1.功能简介 地图鼠标事件包含鼠标的按下MouseDown(),弹起MouseUp(),移动MouseMove()等事件,通过这些事件可以对地图进行动态的操作,接下来以地图状态栏的信息为例具体介绍如何 ...

  9. Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)

    Vue 事件监听实现导航栏吸顶效果(页面滚动后定位) Howie126313 关注 2017.11.19 15:05* 字数 100 阅读 3154评论 0喜欢 0 所说的吸顶效果就是在页面没有滑动之 ...

随机推荐

  1. JavaScript中‘this’关键词的优雅解释

    本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...

  2. jQuery动画与特效详解

    本文主要是讲解和学习jQuery的自动显隐,渐入渐出等. 1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,本节简单介绍jQuery的显示和隐藏. 代码如下: &l ...

  3. c#进阶之神奇的CSharp

    CSharp 简写为c#,是一门非常年轻而又有活力的语言. CSharp的诞生      在2000年6月微软发布了c#这门新的语言.作为微软公司.NET 平台的主角,c#吸收了在他之前诞生的语言(c ...

  4. python脚本后台运行

    问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...

  5. 轻量级ORM框架——第一篇:Dapper快速学习

    我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...

  6. Eclipse创建Maven工程报错

    问题 用Eclipse创建maven工程的时候,总是会报错,例如提示: Unable to create project from archetype [org.apache.maven.archet ...

  7. inotify+rsync实现实时同步部署

    1.1.架构规划 1.1.1架构规划准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server-inotify-tools) 192.168.1.14 Cen ...

  8. DOS下命令符开启wifi无internet访问解决办法

    先按win+R 输入cmd netsh wlan set host mode=allow ssid=nothing key=323435435 (ssid后面的可以任意,key后面最少8个字符) 我的 ...

  9. 大数据慎行,数据管理要落实到KPI

    近年来,"大数据"一词被IT和互联网行业广泛提及,但真正落到实处的案例没有多少,大数据量支撑.数据挖掘技术.非结构化数据是阻碍的主要原因.大多数企业的信息化并没有达到到成熟水平,关 ...

  10. plain framework 1 1.0.4 更新 稳定版发布

    PF由于各种因素迟迟不能更新,此次更新主要是更新了以往和上个版本出现的内存问题,该版本较为稳定,如果有用到的朋友请更新至此版本. PF 1.0.4 修复1.0.0.3更新后产生的内存问题,可能导致网络 ...