问题记录:JavaFx 鼠标滑轮滚动事件监听!
问题描述:
在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 鼠标滑轮滚动事件监听!的更多相关文章
- java鼠标与键盘事件监听
package cn.stat.p3.windowdemo; import java.awt.Button; import java.awt.FlowLayout; import java.awt.F ...
- js鼠标滑轮滚动事件绑定(兼容主流浏览器)
/** Event handler for mouse wheel event. *鼠标滚动事件 */ var wheel = function(event) { var delta = 0; if ...
- WebView使用详解(二)——WebViewClient与常用事件监听
登录|注册 关闭 启舰 当乌龟有了梦想…… 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书 免费直播:AI时代,机器学习如何入门? 程序员8 ...
- js判断鼠标滑轮滚动方向并根据滚动的方向触发不同的事件
<script> var scrollFunc = function (e) { var direct = 0; e = e || window.event; if (e.wheelDel ...
- java 事件监听 - 鼠标
java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
- 利用JavaFx开发RIA桌面应用-事件监听
1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...
- PIE SDK地图鼠标事件监听
1.功能简介 地图鼠标事件包含鼠标的按下MouseDown(),弹起MouseUp(),移动MouseMove()等事件,通过这些事件可以对地图进行动态的操作,接下来以地图状态栏的信息为例具体介绍如何 ...
- Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)
Vue 事件监听实现导航栏吸顶效果(页面滚动后定位) Howie126313 关注 2017.11.19 15:05* 字数 100 阅读 3154评论 0喜欢 0 所说的吸顶效果就是在页面没有滑动之 ...
随机推荐
- Angular版本1.2.4在IE11的IE8模式下出错解决方案
今天,群里一个兄弟抛出一个问题(如上),截图说明. 打断点调试下,貌似是console里面的log方法出错了,如下: 这个是console的log方法,为什么错呢,继续: 我们会发现,在这里是检测fu ...
- android JNI 调用NDK方法
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 分布式一致性算法--Raft
前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现.有关Raft协议和工程实现可以参考这个链接https://raft.gi ...
- Merge 的小技巧
今天跟大家分享一下搬动数据使用Merge的方法. 有些时候,当我们做数据搬动的时候,有时候做测试啊,换对象啊,就会存在有时候外键存在,不知道怎么对应的关系.比如我现在有架构相同的两组table , A ...
- RemodelanyWhere11.0.2673版本下载
百度云盘链接:http://pan.baidu.com/s/1geL5lez 密码:hisq 原文转载至:http://blog.sun0816.com/13623.html
- WPF 自定义IconButton
自定义一个按钮控件 按钮控件很简单,我们在项目中有时把样式封装起来,添加依赖属性,也是为了统一. 这里举例,单纯的图标控件怎么设置 1.UserControl界面样式 <UserControl ...
- USB Host的上拉下拉电阻
关于USB的上下拉电阻,不是随便接个任意阻值的电阻就ok了. 当你的USB为主设备的时候,D+.D-上分别接一个15K的下拉电阻,这样可以使得在没有设备插入的时候,D+.D-上始终保持低电平:当为 ...
- 在IT择善培训机构的培训心得
人的一生中都是不断学习来提高 自己,俗话说:“知识是人类不断进步的阶梯”也是“飞向天空的翅膀”. 本人因工作的加入了择善进行学习,能成为择善的学员,不知不觉来到择善1个多月,回想起这1个多 ...
- 禁用Windows重复数据删除
重复数据删除,可以减少磁盘占用,但使用不当也有可能增加IO,另外,也为此功能会将硬盘分块,所以当硬盘占用较高时,进行碎片整理也比较困难,所以有时需要禁用掉重复数据删除功能,并解除重复数据的优化,可以通 ...
- 理解Docker(8):Docker 存储之卷(Volume)
(1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 ...