2015-01-05 21 views
0

我想有3個對象做不同的事情,所以我想獲得調用者的來源。 我使用的是lambda,我沒有使用關鍵幀,動畫是相同的和循環的,所以我不需要爲不同的關鍵幀指定不同的行爲。javafx8時間軸 - 如何獲得動畫的來源

也許我做錯了lambda?

這是我的代碼:

class MyClock extends ClockPane //clockpane extends pane 
    { 
     Timeline animation;    
     int id; 

     EventHandler<ActionEvent> eventHandler = e -> 
     {//startAnimationById(); 
     System.out.println(e.getSource()==clockControl1.myclock.animation); 
     }; 

     public MyClock(int c,int id)  
     { 
      super(c); 

      this.id=id;   
      animation = new Timeline(new KeyFrame(Duration.millis(1000),eventHandler)); 
      animation.setCycleCount(Timeline.INDEFINITE); 
      animation.play(); 
     } 

的startanimationbyid方法適用於使用我定義爲避免這個問題的ID,但它肯定不會來煩我。

予有這種類型的3個不同的對象,每一個是嵌套INA clockcontrol類 (換句話說我有clockcontrol1 clockcontrol2和3,其具有在其中一個MyClock myclock的這些各一個)

打印我有那裏的所有時鐘都返回false(總數爲3),而當前寫入的時間是我希望第一個時鐘變爲真的時候...我嘗試了不同的變化,我在這裏發佈的只是最後一個變化,但我對我所有的嘗試都是虛假的。

我在哪裏搞砸了?

回答

0

API for KeyFrame沒有指定ActionEvent的來源。你可以做System.out.println(e.getSource())來看(事件的來源似乎是KeyFrame對象,而不是動畫),但沒有真正的保證,它總會是你期望的。

如果您希望MyClock的不同實例的行爲不同,您可以爲不同的行爲提供參數。在這種情況下,你可以使用一個Runnable在事件處理程序,以執行不同的代碼:

public class Controller1 { 

    // ... 

    MyClock clock = new MyClock(...,() -> { 
     // code to execute for this clock 
    }); 
} 

public class Controller2 { 

    // ... 
    MyClock clock = new MyClock(...,() -> { 
     // code to execute for this clock 
    }); 
} 
+0

感謝:

class MyClock extends ClockPane //clockpane extends pane { Timeline animation; // int id; public MyClock(int c, Runnable handler) { super(c); EventHandler<ActionEvent> eventHandler = e -> handler.run() ; animation = new Timeline(new KeyFrame(Duration.millis(1000),eventHandler)); animation.setCycleCount(Timeline.INDEFINITE); animation.play(); } } 

然後,因爲你需要,你可以舉例說明這些答覆,對於我提出的問題給出了它的結構似乎是一個很好的解決方案。 我想出了一個更好的解決方案,我的具體問題。 儘管不是一般的,但它足夠滿足我的需求。 我將動畫更改爲: animation = new Timeline(new KeyFrame(Duration.millis(1000),ev - > startAnimation())); 而且方法本身是: \t \t \t私人無效startAnimation() \t \t \t {\t \t \t \t \t如果(this.getParent()== clockControl1) \t \t \t \t \t ... } – user2893825

+0

這看起來不太可維護,但確定。 –