2016-04-09 14 views
3

1 saniyede görüntü LayoutX ve LayoutY konumlarını değiştirmeye çalışıyorum. Ancak buna uygun herhangi bir (zamanlayıcı) yöntem bulamıyorum. Java veya JavaFX kullanarak bir "zamanlayıcı döngüsü" oluşturmama izin veren JavaScript "setInterval" benzeri bir şey arıyorum.Görüntüyü her 1 saniyede bir yeni X ve Y konumuna verin

Herhangi bir tavsiyemiz geniş bir alana yayılmıştır!

+0

hoşuna demek: https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html? – c0der

cevap

3

java.util.Timer ile böyle bir görevi zamanlayabilirsiniz.

timer.schedule() yöntemi yalnızca bir görevi yürütür. Görevinizi tekrar etmek için timer.scheduleAtFixedRate() yöntemini kullanın.

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

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

scheduleAtFixedRate() ikinci parametre milisaniye ilk uygulama ve son parametre önceki gecikme milisaniye yürütülen görevler arasında aralık olmasıdır.

1

Bu amaç için INDEFINITE döngü sayısı ile Timeline kullanabilirsiniz.

Örnek:

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

Bu olay işleyicisi layabilecek JavaFX uygulama parçacığı üzerinde çalışır.

0

javax.swing.Timer gösteri:

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