Animation javafx8时间线-如何获取动画源

Animation javafx8时间线-如何获取动画源,animation,lambda,javafx-8,timeline,Animation,Lambda,Javafx 8,Timeline,我想让3个对象做不同的事情,所以我想得到调用者的来源。 我使用lambda,我没有使用关键帧,动画是相同的和循环的,所以我不需要为不同的关键帧指定不同的行为 也许我对lambda做了什么错事 这是我的代码: class MyClock extends ClockPane //clockpane extends pane { Timeline animation; int id; EventHandler<A

我想让3个对象做不同的事情,所以我想得到调用者的来源。 我使用lambda,我没有使用关键帧,动画是相同的和循环的,所以我不需要为不同的关键帧指定不同的行为

也许我对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();
        }   
class MyClock扩展时钟窗格//时钟窗格扩展窗格
{
时间轴动画;
int-id;
EventHandler EventHandler=e->
{//startAnimationById();
System.out.println(e.getSource()==clockControl1.myclock.animation);
};
公共MyClock(整数c,整数id)
{
超级(c);
这个.id=id;
动画=新的时间线(新的关键帧(Duration.millis(1000),eventHandler));
animation.setCycleCount(Timeline.unfinite);
动画。播放();
}   
startanimationbyid方法使用我定义的id来避免这个问题,但它确实让我感到不舒服

我有3个这种类型的不同对象,每个对象嵌套在clockcontrol类中 (换句话说,我有clockcontrol1 clockcontrol2和3,每一个都有一个MyClock MyClock)

我在那里的打印对于我所有的时钟都返回false(总共3个),而正如目前所写的那样,我希望在第一个时钟中得到true…我尝试了不同的版本,我在这里发布的只是最后一个版本,但我所有的尝试都是false

我在哪里把事情搞砸了?

没有指定
ActionEvent
的来源。您可以只做
System.out.println(e.getSource())
来查看(似乎事件的来源是
关键帧
对象,而不是动画),但没有真正的保证它总是你所期望的

如果希望不同的
MyClock
实例表现不同,可以为不同的行为提供参数。在这种情况下,可以使用
Runnable
在事件处理程序中执行不同的代码:

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(新的关键帧(Duration.millis(1000),ev->startAnimation());方法本身是:private void startAnimation(){if(this.getParent()==clockControl1)…}这看起来不太容易维护,但还行。
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
    });
}