Javafx 2 如何确定某个节点上是否已经在运行转换?
如何确定节点上是否已经运行了转换-例如Javafx 2 如何确定某个节点上是否已经在运行转换?,javafx-2,Javafx 2,如何确定节点上是否已经运行了转换-例如FadeTransition?注意:我自己没有尝试过与此相关的任何操作。这与其说是一个解决方案,不如说是一个草图。评论太长了,所以我在这里写提纲 在我看来,您可以创建一个与节点关联的布尔值(“transitionPlaying”),每次在节点上启动转换时,您都将其设置为true 然后,对于每个转换,在转换完成时定义一个行为: yourTransition.setOnFinished(new EventHandler<ActionEvent>(){
FadeTransition
?注意:我自己没有尝试过与此相关的任何操作。这与其说是一个解决方案,不如说是一个草图。评论太长了,所以我在这里写提纲
在我看来,您可以创建一个与节点关联的布尔值(“transitionPlaying”),每次在节点上启动转换时,您都将其设置为true
然后,对于每个转换,在转换完成时定义一个行为:
yourTransition.setOnFinished(new EventHandler<ActionEvent>(){
public void handle(ActionEvent AE){
transitionPlaying = false;
}
yourTransition.setOnFinished(新的EventHandler(){
公共无效句柄(ActionEvent AE){
转换播放=错误;
}
请注意,这仅仅回答了您最基本的问题-很难再写更多的内容,因为我不知道您为什么想知道转换是否完成(如果您想在转换完成后执行某些操作,则会打开一整罐蠕虫。如果正在播放转换,您可以将要运行的下一个转换添加到队列中,然后定义setonfinish,以便在转换完成时调用队列中的下一个转换。)
该解决方案有一个限制,即在任何时刻一个节点上最多只能播放一次转换
更新以查找节点上的所有转换是否已完成
您可以使用int而不是bool,对于开始的每个转换,您将计数器递增1,完成后将其递减1。这样,您就知道所有转换都是在计数器读取“0”时完成的。通过这种方式,我的解决方案解决了知道节点上的所有转换是否完成的问题。您始终可以使用,因为转换扩展了对象。无需另一个变量,您只需:
FadeTransition fade = new FadeTransition()
fade.statusProperty().addListener(new ChangeListener<Status>() {
@Override
public void changed(ObservableValue<? extends Status> observableValue,
Status oldValue, Status newValue) {
if(newValue==Status.RUNNING)
System.out.println("Animation is still running");
}
});
fade.play();
FadeTransition fade=新的FadeTransition()
fade.statusProperty().addListener(新的ChangeListener()){
@凌驾
更改公众假期(ObservalEvalue感谢您的帮助。我想分享我为我的特定问题最终选择的解决方案。其内容如下:我想在鼠标单击时淡出一个节点。当出现大量单击时,新的FadeTransition
应仅在当前一个完成时启动,以防止闪烁或其他现象
我的方法可以在函数的第一行看到:
@FXML
public void chartMouseClicked(MouseEvent event){
if (ft.getCurrentRate()!=0.0d) return;
ft.play();
}
在这种情况下,ft
是类型为FadeTransition
的私有字段,在“init”函数中实例化一次
在暂停或停止转换时返回0.0
。我不需要暂停转换,所以这是我的方法-我只是检查值,然后让转换停止后再次播放。很好的发现。仍然存在知道节点上的所有转换是否完成的问题。有一种方法,但可能是错误的ound overkill。创建一个扩展节点的自定义类。创建一个FXObservableList of Transitions。创建自定义方法以注册到节点的转换并将这些转换存储在列表中。以编程方式探测转换列表中的动画。状态