使用 onKeyReleased 事件创建搜索引擎的用途
What to use to create search engine using onKeyReleased event
我正在尝试创建一个搜索栏,它将从数据库中搜索输入的字符串或字符。当在文本字段中输入第一个字符时,它应该等待接下来的 200 毫秒,如果在这段时间内输入下一个字符,那么它将重新启动计数器,如果没有再次等待接下来的 200 毫秒,那么它将从数据库中搜索。
这是一些我试过但对我不起作用的代码
@FXML protected void keyReleased(KeyEvent evt)throws Exception {
if (evt.getCode() != KeyCode.BACK_SPACE) {
String ch = evt.getText();
String[] myArray = new String[5];
run();
searchFrmDb(ch, myArray);
}
}
public void run(){
for(int i=1;i<5;i++){
try{
Thread.sleep(200);
}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public void searchFrmDb(String ch,String[] myArray){
//db search operation ...
}
我是新手 java 帮我解决一下我的问题
我应该使用什么 thread
或 Timer
或其他什么
我会看看 java.util.Timer
和 java.util.TimerTask
:
class SearchTimerTask extends TimerTask{
@Override
public void run(){
searchFrmDb();
}
@Override
public void cancel(){
super.cancel();
//handle cancellation logic if necessary
}
}
在某处保留对 Timer
和 TimerTask
的引用:
Timer timer = new Timer();
TimerTask task;
然后在您的按键事件处理程序中,您只需取消当前任务(如果有)并启动一个新任务:
@FXML protected void keyReleased(KeyEvent evt)throws Exception {
if (evt.getCode() != KeyCode.BACK_SPACE) {
if(task != null){
task.cancel();
task = new SearchTimerTask();
}
timer.schedule(task, 200);
}
}
考虑使用 PauseTransition
实现这样的功能。
public class ControllerClass {
private final PauseTransition pauseBeforeSearch = new PauseTransition(Duration.millis(200));
@FXML protected void keyReleased(KeyEvent evt)throws Exception {
if (evt.getCode() != KeyCode.BACK_SPACE) {
pauseBeforeSearch.setOnFinished(e -> {
searchFrmDb(evt.getText(), new String[5]);
});
pauseBeforeSearch.playFromStart();
}
}
}
我正在尝试创建一个搜索栏,它将从数据库中搜索输入的字符串或字符。当在文本字段中输入第一个字符时,它应该等待接下来的 200 毫秒,如果在这段时间内输入下一个字符,那么它将重新启动计数器,如果没有再次等待接下来的 200 毫秒,那么它将从数据库中搜索。
这是一些我试过但对我不起作用的代码
@FXML protected void keyReleased(KeyEvent evt)throws Exception {
if (evt.getCode() != KeyCode.BACK_SPACE) {
String ch = evt.getText();
String[] myArray = new String[5];
run();
searchFrmDb(ch, myArray);
}
}
public void run(){
for(int i=1;i<5;i++){
try{
Thread.sleep(200);
}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public void searchFrmDb(String ch,String[] myArray){
//db search operation ...
}
我是新手 java 帮我解决一下我的问题
我应该使用什么 thread
或 Timer
或其他什么
我会看看 java.util.Timer
和 java.util.TimerTask
:
class SearchTimerTask extends TimerTask{
@Override
public void run(){
searchFrmDb();
}
@Override
public void cancel(){
super.cancel();
//handle cancellation logic if necessary
}
}
在某处保留对 Timer
和 TimerTask
的引用:
Timer timer = new Timer();
TimerTask task;
然后在您的按键事件处理程序中,您只需取消当前任务(如果有)并启动一个新任务:
@FXML protected void keyReleased(KeyEvent evt)throws Exception {
if (evt.getCode() != KeyCode.BACK_SPACE) {
if(task != null){
task.cancel();
task = new SearchTimerTask();
}
timer.schedule(task, 200);
}
}
考虑使用 PauseTransition
实现这样的功能。
public class ControllerClass {
private final PauseTransition pauseBeforeSearch = new PauseTransition(Duration.millis(200));
@FXML protected void keyReleased(KeyEvent evt)throws Exception {
if (evt.getCode() != KeyCode.BACK_SPACE) {
pauseBeforeSearch.setOnFinished(e -> {
searchFrmDb(evt.getText(), new String[5]);
});
pauseBeforeSearch.playFromStart();
}
}
}