当我将winBox可见性设置为false时,我看不到文本,尽管我设置了(i)应等于文本长度的条件。如果我移除它,它可以工作,但文本仍然在屏幕上。哪里是失败的地方,以及如何在播放后隐藏文本。谢谢
private HBox winBox;
public void win(){
String winMs = "Level 2";
for (int i = 0; i < winMs.toCharArray().length; i++){
char letter = winMs.charAt(i);
Text winTxt = new Text(String.valueOf(letter)); //Node
winBox.getChildren().add(winTxt);
winTxt.setFont(Font.font(48));
winTxt.setOpacity(0.05);
FadeTransition fade = new FadeTransition(Duration.seconds(1), winTxt);
fade.setToValue(1);
fade.setDelay(Duration.seconds(i * 0.1));
fade.play();
if(i == winMs.toCharArray().length)
winBox.setVisible(false);
}
}发布于 2018-05-03 21:26:25
这里的关键是setOnFinished。就像@Fabian所说的,在循环之外使用它,这样它就会在最终淡出完成时捕捉到。
fade.setOnFinished((event) -> {
winBox.setVisible(false);
});完整代码:
import javafx.animation.FadeTransition;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
*
* @author blj0011
*/
public class JavaFXApplication183 extends Application
{
@Override
public void start(Stage primaryStage)
{
HBox winBox = new HBox();
String winMs = "Level 2";
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
FadeTransition fade = null;
for (int i = 0; i < winMs.toCharArray().length; i++) {
char letter = winMs.charAt(i);
Text winTxt = new Text(String.valueOf(letter)); //Node
winBox.getChildren().add(winTxt);
winTxt.setFont(Font.font(48));
winTxt.setOpacity(0.05);
fade = new FadeTransition(Duration.seconds(1), winTxt);
fade.setToValue(1);
fade.setDelay(Duration.seconds(i * 0.1));
fade.play();
}
fade.setOnFinished(actionEvent -> winBox.setVisible(false));
});
StackPane stackPane = new StackPane();
stackPane.getChildren().add(btn);
VBox root = new VBox(winBox, stackPane);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}发布于 2018-05-03 20:48:47
您需要满足以下条件
if(i == winMs.toCharArray().length - 1)
winBox.setVisible(false);而不是
if(i == winMs.toCharArray().length)
winBox.setVisible(false);https://stackoverflow.com/questions/50155322
复制相似问题