首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要隐藏字符串"Level 2“后,它完成播放

问我需要隐藏字符串"Level 2“后,它完成播放
EN

Stack Overflow用户
提问于 2018-05-03 20:39:59
回答 2查看 47关注 0票数 0

当我将winBox可见性设置为false时,我看不到文本,尽管我设置了(i)应等于文本长度的条件。如果我移除它,它可以工作,但文本仍然在屏幕上。哪里是失败的地方,以及如何在播放后隐藏文本。谢谢

代码语言:javascript
复制
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);
    }

}
EN

回答 2

Stack Overflow用户

发布于 2018-05-03 21:26:25

这里的关键是setOnFinished。就像@Fabian所说的,在循环之外使用它,这样它就会在最终淡出完成时捕捉到。

代码语言:javascript
复制
fade.setOnFinished((event) -> {
    winBox.setVisible(false); 
});

完整代码:

代码语言:javascript
复制
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);
    }

}
票数 3
EN

Stack Overflow用户

发布于 2018-05-03 20:48:47

您需要满足以下条件

代码语言:javascript
复制
if(i == winMs.toCharArray().length - 1)
    winBox.setVisible(false);

而不是

代码语言:javascript
复制
if(i == winMs.toCharArray().length)
        winBox.setVisible(false);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50155322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档