问题描述:

  在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. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  2. 5.2 Array类型介绍

    Array类型是数组类型,Array(数组)类型也是引用类型中的一种. js 数组中的每一项可以保存任何类型的数据. js数组的大小/长度是可以动态调整的.如果你往数组中添加数据,数组长度会自动增加. ...

  3. ArcGIS Engine开发之书签加载

    ArcGIS中书签是保存特定视图范围的快捷方式.使用书签保存关注的视图范围,可在需要时快速定位.查看与浏览.书签功能主要用到IMapBookmarks.ISpatialBookmark和IAOIBoo ...

  4. [Android]使用Dagger 2依赖注入 - API(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...

  5. JAVA编程思想(第四版)学习笔记----11.4 容器的打印

    import static java.lang.System.out; import java.util.ArrayList; import java.util.Collection; import ...

  6. 文本处理三剑客之sed命令

    第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...

  7. Fedora javac 命令提示 [javac: 未找到命令...]

    [joy@localhost ~]$ java -version openjdk version "1.8.0_91" OpenJDK Runtime Environment (b ...

  8. easyUI的基础布局

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. python爬虫学习(7) —— 爬取你的AC代码

    上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...

  10. Doctype作用?严格模式与混杂模式如何区分?它们有何意义?

    怪异模式和严格模式(译注:一般称为标准模式:Standards Mode,下文中的严格模式都可以理解为标准模式)是浏览器解析CSS时的两种‘模式’.这篇文章将简单阐述这两种模式之间的差异. 译注:一个 ...