gpt4 book ai didi

java - 如何暂停 Java.util.Timer?

转载 作者:搜寻专家 更新时间:2023-11-01 03:18:29 25 4
gpt4 key购买 nike

我正在开发一个 JavaFX 应用程序,我在其中使用 java.util.Timer 来跟踪用户鼠标移动。

概念是如果鼠标在场景中几秒钟没有移动,那么只要鼠标移动按钮就会再次出现,按钮将不可见。每当用户将光标放在按钮上时,计时器将停止。退出时,按钮计时器将再次启动。

这是启动定时器的方法

    public static void startTimer(){

timer = new Timer();
task = new TimerTask() {

@Override
public void run() {

if(detection>0){
Util_Class.getUi_obj().getLeftbuttongroup().setVisible(false);
Util_Class.getUi_obj().getRightbuttongroup().setVisible(false);
}else{
detection++;
}

}
};

timer.schedule(task, 2000, 2000);
System.out.println("TIMER STARTED");
//startTimer();
}

这是停止计时器

public static void stopTimer(){

timer.cancel();
System.out.println("TIMER STOPED");
}



public void leftbuttonmovehandler(MouseEvent event){


if(event.getEventType()==MouseEvent.MOUSE_ENTERED){
System.out.println("MOUSE ENTERED");
Main.stopTimer();
}else if(event.getEventType()==MouseEvent.MOUSE_EXITED){
System.out.println("MOUSE EXITED");
Main.start();
}

}

现在,我的代码一开始在应用程序启动时运行良好,但当我重新加载应用程序时,回调函数按预期触发,但尽管光标位于按钮上,但按钮消失了。

如果有人能帮助我就好了。

最佳答案

PauseTransition 可用于在指定时间后隐藏 Button

每当触发MOUSE_MOVE事件时,在场景中,从头开始播放PauseTransition;如果 MOUSE_MOVEButton 之一触发,则停止 PauseTransition 并阻止事件到达 Scene 通过食用它

private PauseTransition timer;

private void startTimer() {
btn.setVisible(true);
btn2.setVisible(true);
timer.playFromStart();
}

private void stopTimer() {
btn.setVisible(true);
btn2.setVisible(true);
timer.stop();
}

private Button btn, btn2;

@Override
public void start(Stage primaryStage) {
timer = new PauseTransition(Duration.seconds(3));

btn = new Button("Button 1");
btn2 = new Button("Button 2");

timer.setOnFinished(evt -> {
btn.setVisible(false);
btn2.setVisible(false);
});

EventHandler<MouseEvent> buttonMouseMoveHandler = evt -> {
evt.consume();
stopTimer();
};

btn.setOnMouseMoved(buttonMouseMoveHandler);
btn2.setOnMouseMoved(buttonMouseMoveHandler);

VBox box = new VBox(100, btn, btn2);

StackPane root = new StackPane(new Group(box));

Scene scene = new Scene(root, 500, 500);
scene.setOnMouseMoved(evt -> {
startTimer();
});

startTimer();

primaryStage.setScene(scene);
primaryStage.show();
}

关于java - 如何暂停 Java.util.Timer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39297155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com