2016-04-12 9 views
0

Her iki saniyede bir etiketi güncellemeye çalışıyorum, normal bir Zamanlayıcı kullanmayı denedim, ancak başka bir iş parçacığında etiketinde değişiklik yapamadığından, bu Zamanlayıcı:Her belirli saniyede bir void yöntemini tetiklemek için TimeLine kullanın JavaFX

public void setTimer(Timer timer, int seconds, String userName, String content, VBox tabContent,ArrayList<Integer> countTweetsArray, Label statusLabel) { 
TabContent tabContentObj = new TabContent(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
     setTweet(userName, content); 
     //tabContentObj.createStatusScreen(tabContent, countTweetsArray, remainingTweets); 
     System.out.println(content+" after "+seconds); 
     System.out.println("countTweetsArray: "+countTweetsArray.get(0)); 
     statusLabel.setText(countTweetsArray.get(0).toString()); 
     countTweetsArray.set(0, (countTweetsArray.get(0)+1)); 
     tabContentObj.timersMap.put(userName, timer); 
    } 
}, (seconds*1000)); 
} 

Ben zaman çizgisini kullanarak bir etikete periyodik değişiklikler yapabilirsiniz okumak ama bu sadece ilgili herhangi animasyon olmadan bir boşluk yöntemi tetiklemek için bir yolu var mı, keyvalues ​​ve ana kareleri nasıl çalıştığını anlayamıyorum?

cevap

3

Bir Duration ve bir olay işleyicisi alır KeyFrame constructor kullanabilirsiniz:

Timeline timeline = new Timeline(
    new KeyFrame(Duration.seconds(seconds), e -> { 
     // code to execute here... 
    }) 
); 
timeline.play(); 

Güncelleme: bunu durdurmak için bir düğme gerekiyorsa,

Button button = new Button("Stop"); 
button.setOnAction(e -> timeline.stop()); 
+0

ile bir kullanılan yapabilirsiniz Cevabınızdaki kodun snippet'i de lambda da kullandı, sorun şu ki zamanlayıcıyı bir düğme ile durdurmak istiyorum ve zaman çizelgesi nesnesini bildirmeye çalıştım ve sonra yapıcıya iletmem gerekirse final lambda kullanırsam, timeli nasıl referans göstereceğine dair bir fikrin var mı ne onu durdurmak için? –

+0

Sadece bir kez bir değer atarsanız, bu "etkili son" ve bir lambda kullanılabilir. Zaten birden çok kez atayacağın bir sebep göremiyorum. Gerçekten ihtiyacınız varsa, her zaman bir örnek değişken yapabilirsiniz. –

+0

Güncellemeye gönderdiğiniz kodu constructor yönteminin içine koyar mıyım? –

İlgili konular