2016-04-09 5 views
3

イメージLayoutXとLayoutYの位置を1秒に変更しようとしています。しかし、私はこれに適した任意の(タイマー)メソッドを見つけることができません。私は単にJavaまたはJavaFXを使用して "タイマーサイクル"を作成できるJavaScript "setInterval"に似たものを探しています。イメージを1秒おきに新しいXとYのポストを与えます

アドバイスは広く公開されています。

+0

あなたは次のように意味ですか? – c0der

答えて

3

java.util.Timerでは、このようなタスクをスケジュールできます。

メソッドtimer.schedule()は、タスクのみを実行します。タスクを繰り返すには メソッドtimer.scheduleAtFixedRate()を使用します。

Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() { 

    @Override 
    public void run() { 
     System.out.println("hello"); 
    } 
}, 1000, 1000); 

scheduleAtFixedRate()の第2のパラメータは、ミリ秒単位の最初の実行と最後のパラメータの前に遅延をミリ秒単位で実行されるタスク間の間隔です。

1

には、INDEFINITEサイクルカウントを使用できます。

例:

Timeline tl = new Timeline(new KeyFrame(Duration.seconds(1), evt -> { 
    // toggle image postion 
    imageView.setLayoutX(200 - imageView.getLayoutX()); 
    imageView.setLayoutY(200 - imageView.getLayoutY()); 
})); 
tl.setCycleCount(Animation.INDEFINITE); 
tl.play(); 

これは、イベントハンドラを保証をは、JavaFXアプリケーションのスレッドで実行されます。

0

のjavax.swing.Timerデモ:https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html:

public static void main(String[] args) { 

     JFrame jf = new JFrame(); 

     jf.setPreferredSize(new Dimension(200,100)); 
     int sec = 5 ; 
     JLabel lbl = new JLabel(" auto closing in "+sec + " seconds."); 
     jf.getContentPane().add(lbl); 

     jf.pack(); 
     jf.setVisible(true); 

     runTimer(sec , jf); 
    } 

    /** 
    * Timer to auto close frame. 
    * 
    * @param duration in seconds 
    * @param jf 
    */ 
    protected static void runTimer(int duration, final JFrame jf) { 

     //add action listner to be acrivated by timer 
     ActionListener taskPerformer = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent evt) { 
       jf.dispose(); 
      } 
     }; 

     if (duration >60) 
     { 
      duration = 60; //set max timer 
     } 

     new javax.swing.Timer(duration * 1000, taskPerformer).start(); 
    } 
関連する問題