我正在开发一个JavaFX应用程序,在该应用程序中,我使用java.util.Timer来跟踪用户鼠标的移动。
这个概念是,如果鼠标在场景中几秒钟内不移动,那么当鼠标移动按钮再次出现时,按钮将是不可见的。每当用户将光标放在按钮计时器上时,当退出时,按钮计时器将是stopped.And,按钮计时器将重新启动。
这是开始计时器方法。
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();
}
}现在,当应用程序启动时,我的代码一开始运行良好,但是当我重新加载应用程序时,回调函数会像预期的那样触发,但是按钮会消失,尽管光标在按钮上。
如果有人能帮我那就太好了。
发布于 2016-09-02 17:02:35
PauseTransition可用于在指定时间后隐藏Button。
每当一个MOUSE_MOVE事件被触发时,在场景中,从一开始就播放PauseTransition;如果MOUSE_MOVE是为某个Button触发的,则停止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();
}https://stackoverflow.com/questions/39297155
复制相似问题