转换结束时 JavaFX 重复循环
JavaFX repeat loop when transition ends
我正在尝试执行以下循环:
- 更新一些变量
- 根据 on/representing 变量播放一个过渡
- 转换完成后,转到 1
这将永远重复。我让它与以下一起工作:
//Step 3
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
doTheThing(); //Step 1, updates data
transition.setToValue(data);
transition.play(); // Step 2
}
});
transition.play(); //Triggers first repeat
当然,这是一个无限递归循环,这不是一个好主意。问题是,一旦转换完成,我无法弄清楚如何触发重复。我试过使用循环:
while (1==1){
doTheThing();
transition.setToValue(data);
transition.play();
}
但这不仅不等待过渡(意料之中,对我来说不是问题),根本不播放过渡,而且程序没有响应。我也试过这个:
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
ready = true;
}
});
while (1==1){
if (ready){
ready = false;
doTheThing();
transition.setToValue();
transition.play();
}
}
但它的作用与解决方案 #2 相同。我宁愿不编写等待程序,但即使我编写了程序,我也不确定如何让循环在重复之前等待,同时又不停止播放过渡。
我可以做什么?
我建议您使用 TimeLine
where you can specify the cycleCount
which you can set to INDEFINITE
。
示例:
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), ev -> {
// TODO do something meaningful here
}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
我正在尝试执行以下循环:
- 更新一些变量
- 根据 on/representing 变量播放一个过渡
- 转换完成后,转到 1
这将永远重复。我让它与以下一起工作:
//Step 3
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
doTheThing(); //Step 1, updates data
transition.setToValue(data);
transition.play(); // Step 2
}
});
transition.play(); //Triggers first repeat
当然,这是一个无限递归循环,这不是一个好主意。问题是,一旦转换完成,我无法弄清楚如何触发重复。我试过使用循环:
while (1==1){
doTheThing();
transition.setToValue(data);
transition.play();
}
但这不仅不等待过渡(意料之中,对我来说不是问题),根本不播放过渡,而且程序没有响应。我也试过这个:
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
ready = true;
}
});
while (1==1){
if (ready){
ready = false;
doTheThing();
transition.setToValue();
transition.play();
}
}
但它的作用与解决方案 #2 相同。我宁愿不编写等待程序,但即使我编写了程序,我也不确定如何让循环在重复之前等待,同时又不停止播放过渡。
我可以做什么?
我建议您使用 TimeLine
where you can specify the cycleCount
which you can set to INDEFINITE
。
示例:
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), ev -> {
// TODO do something meaningful here
}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();