ben*_*i26 3 javafx timedelay delay listener livesearch
我正在开发一个JavaFX 8应用程序,我有一个tableView和一些textFields,可以搜索/过滤tableView中的某些列.我已经为textFields添加了一个监听器,以便在检测到更改时自动触发过滤.我使用下面的代码来做到这一点.
textField_filterAddress.textProperty().addListener((observable, oldValue, newValue) -> {
doSomething(); // in this case, filter table data and refresh tableView afterwards
});
Run Code Online (Sandbox Code Playgroud)
我现在的问题是:在过滤被触发之前,什么是最简单的集成某种时间延迟的方法?我想等几毫秒,因为每次用户过滤它时都在执行一个新的数据库查询,我认为这对于用户输入的每个字符都不是必需的.我宁愿等到他/她完成了他的输入.是否有某种类似的功能已经内置到整个听众的事情中?或者我必须实施自己的解决方案?如果是这样,怎么样?我考虑过某种并发解决方案,因此其他软件在等待期间不会冻结.但我以为我会问这里是否有一个更简单的解决方案,然后再考虑我自己的方式......
非常感谢提前!
jew*_*sea 12
下面的代码将安排在文本字段最后一次更改后延迟1秒后执行某些操作.如果文本字段在该1秒窗口内发生变化,则忽略先前的更改,并计划使用新值从最近的更改开始1秒完成.
PauseTransition pause = new PauseTransition(Duration.seconds(1));
textField.textProperty().addListener(
(observable, oldValue, newValue) -> {
pause.setOnFinished(event -> doSomething(newValue));
pause.playFromStart();
}
);
Run Code Online (Sandbox Code Playgroud)
我没有测试这个,但它应该工作:-)
更复杂的解决方案可能是使用"健忘"的ReactFX可挂起事件流.基于ReactFX的解决方案在相关问题中进行了讨论:
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |