2016-09-02 10 views
4

私はjava.util.Timerを使用してユーザーのマウスの動きを追跡しているJavaFXアプリケーションを開発しています。Java.uti.Timerを一時停止する方法?

概念は次のとおりです。マウスがシーン内で数秒間動かない場合、マウスが動くたびにボタンが見えなくなります。ボタンが再び表示されます。そして、ユーザーがボタンの上にカーソルを置くたびに、タイマーは停止されます。また、ボタンのタイマーが終了すると再び開始します。

これが今、私のコードは、いつでもアプリは起動しますが、私はアプリをリロードするコールバック関数最初は正常に動作します。これは、タイマー

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(); 
    } 

} 

を停止することです開始タイマー方法

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(); 
} 

ですカーソルがボタンの上にあってもボタンは消えます。

誰かが私を助けてくれれば素晴らしいだろう。

+1

を消費することによってSceneに達することから、イベントを防ぎます。代わりにその解決策を見たいですか? –

+0

もちろんあります。私はそれを見ています。 –

+0

見つけようとしていただけです。カーソルを「NONE」に設定する[この質問](http://stackoverflow.com/questions/33066754/javafx-set-mouse-hidden-when-idle)を参照してください。ボタンの可視性を 'false'に等しく設定することができます。 –

答えて

2

PauseTransitionは、指定時間後にButtonを非表示にするために使用できます。

MOUSE_MOVEイベントがトリガーされるたびに、シーンでPauseTransitionを最初から再生します。 MOUSE_MOVEButton秒の1のためにトリガされた場合の代わりPauseTransitionを停止し、 `PauseTransition`を使用してJavaFXの中でこれを達成するためにはるかに簡単な方法があり、それを

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(); 
} 
+0

高尚な多くの今は正常に動作して............ :) –

関連する問題