问题描述:

  在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. canvas 制作flappy bird(像素小鸟)全流程

    flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...

  2. Android关于listView的BaseAdapter以及getView的三级优化

    1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器)   getCount(); getItem(); getItemId(); getViewTypaCount() ...

  3. iOS调试通过UILocalNotification或RemoteNotification启动的app

    相信很多同学都为调试苹果的通知烦恼过,特别是通过通知启动app这个功能,简直让人欲哭无泪!!! 然而我们都遇到的问题,苹果怎么可能没有想到,原来早就有了官方的解决办法,只是我们不知道而已... 这次又 ...

  4. 使用GIT进行源码管理 —— 在VisualStudio中使用GIT

    GIT作为源码管理的方式现在是越来越流行了,在VisualStudio 2012中,就通过插件的现实对GIT进行了官方支持,并且这个插件在VS2013中已经转正.本文在这里简单的介绍一下如何在Visu ...

  5. 人工智能AI-机器视觉CV-数据挖掘DM-机器学习ML-神经网络-[资料集合贴]

    说明:这个贴用于收集笔者能力范围内收集收藏并认为有用的资料,方便各方参考,免去到处找寻之苦,提升信息的交叉引用价值.仅供参考,不作为必然的推荐倾向.如涉及版权等问题请相关人员联系笔者,谢谢. |博客| ...

  6. ERROR 2003 (HY000): Can't connect to MySQL server on 'ip address' (111)的处理办法

    远程连接mysql数据库时可以使用以下指令 mysql -h 192.168.1.104 -u root -p 如果是初次安装mysql,需要将所有/etc/mysql/内的所有配置文件的bind-a ...

  7. 前端小菜鸟的Mobile之旅---开篇

          背景:前段时间有幸参与了公司一个基于H5的手机APP项目,(我们用的React+ES6+Webpack+Cordova开发),由此开始接触一些关于H5开发手机APP方面的知识,下面Shar ...

  8. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  9. centos系统编译安装nginx+php环境另加独立mysql教程

    以前看过的安装nginx+php环境都带了mysql数据库了,这个是因为很多站长都是nginx+php+mysql都在同一台服务器了,那么今天我们是单独处理了,一个是nginx+php环境,然后mys ...

  10. pcl曲面网格模型的三种显示方式

    pcl网格模型有三种可选的显示模式,分别是面片模式(surface)显示,线框图模式(wireframe)显示,点模式(point)显示.默认为面片模式进行显示.设置函数分别为: void pcl:: ...