java:让程序等待转换完成



我一直在写一个切换两个图像的方法。这个方法在鼠标拖放事件中被调用,然后是另一个方法,它可以让图像下降几个位置(我说的是一种糖果挤压机制(。在我的例子中,第二种方法中的转换在切换完成之前就开始了,这就是为什么你几乎看不到切换的原因。我正在寻找一种方法,让程序等到第一次转换完成后再进入下一个方法。Thread.sleep((对我来说不起作用,因为它也会停止切换动画,而且我不知道如何在切换方法中正确使用transition.setOnFinished((而不会导致无限循环。

这是我切换方法的一部分:

public void animateSwitch(int xFirst, int yFirst, int xLast, int yLast) {

//

ParallelTransition allMovements = new ParallelTransition();
TranslateTransition tt = new  TranslateTransition(Duration.millis(FALL_TIME_PER_ROW), getNodeFromGridPane(grdPane, xFirst, yFirst));
TranslateTransition tt2 = new TranslateTransition(Duration.millis(FALL_TIME_PER_ROW), getNodeFromGridPane(grdPane, xLast, yLast));
Image old = iv1.getImage();
iv1.setImage(iv2.getImage());
iv1.setTranslateX(iv2.getX());
iv1.setTranslateY(iv2.getY());
iv2.setImage(old);
iv2.setTranslateX(iv1.getX());
iv2.setTranslateY(iv1.getY());
if (xFirst == xLast) {
tt.toYProperty().set(0);
tt.toXProperty().set(tt.getFromX());
if (yFirst < yLast) {
tt.fromYProperty().set(rowHeight);
tt2.fromYProperty().set(-rowHeight);
}
else {
tt.fromYProperty().set(-rowHeight);
tt2.fromYProperty().set(rowHeight);
}
tt2.toYProperty().set(0);
tt2.toXProperty().set(tt2.getFromX());
}
else if (yFirst == yLast) {
tt.toXProperty().set(0);
tt.toYProperty().set(tt.getFromY());
if (xFirst < xLast) {
tt.fromXProperty().set(rowWidth);
tt2.fromXProperty().set(-rowWidth);
}
else {
tt.fromXProperty().set(-rowWidth);
tt2.fromXProperty().set(rowWidth);
}
tt2.toXProperty().set(0);
tt2.toYProperty().set(tt2.getFromY());
}
allMovements.getChildren().add(tt);
allMovements.getChildren().add(tt2);
allMovements.play();  
}

提前感谢!

您必须使用allMovements.setOnFinished(eventHandler);设置onFinished事件处理程序,这里eventHandler是实现EventHandler接口的对象。

编辑:我跳过了您不知道如何使用此解决方案防止无限循环的部分。您可以使用两个不同的事件处理程序来完成不同的部分。当它结束时,第一个调用第二个。第二个不需要调用第一个,所以您不会进入循环。

最新更新