【问题标题】:How to wait to show next toast (snackBar) with JFoenix如何使用 JFoenix 等待显示下一个 toast (snackBar)
【发布时间】:2018-11-21 21:43:10
【问题描述】:

我有以下代码在程序启动时运行。它用于通过 excel 文件显示祝酒词,告知哪些人是当天的生日。然而,当生日的人不止一个时,他会同时展示几个敬酒,一个在另一个之上。我想要一种方式来等待,当敬酒消失时,再展示下一个

Arquivo arquivo = new Arquivo();
ObservableList<String> listaDatas = arquivo.pegarListaString(1, 8); //take people's birthday dates
String data = Agenda.dateParaString(LocalDate.now()).substring(0, 5); //today's day
String data2 = Agenda.dateParaString(LocalDate.now().plusDays(1)).substring(0, 5); //tomorrow
int index = 0;
for(String valor: listaDatas) {
    if (valor.length() > 4) {
        if (valor.substring(0, 5).equalsIgnoreCase(data)) {
            Agenda.mostrarToastTexto("Hoje é aniversário de " + arquivo.pegarValor(1, index, 0), 2000); 
        } else if(valor.substring(0, 5).equalsIgnoreCase(data2)) {
            Agenda.mostrarToastTexto("Amanhã é aniversário de " + arquivo.pegarValor(1, index, 0) , 2000);
        }
    }
    index++;
}

我已经尝试使用“Thread.sleep”以及 Timer 类,但无济于事。

【问题讨论】:

    标签: javafx wait toast snackbar jfoenix


    【解决方案1】:

    这是使用来自here 的代码的一种方法。

    此代码使用Timeline 每两秒显示一个不同的名称。

    import com.jfoenix.controls.JFXSnackbar;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.atomic.AtomicInteger;
    import javafx.animation.KeyFrame;
    import javafx.animation.Timeline;
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import javafx.util.Duration;
    
    /**
     *
     * @author blj0011
     */
    public class JavaFXApplication207 extends Application
    {
    
        @Override
        public void start(Stage primaryStage)
        {
            StackPane root = new StackPane();
    
            JFXSnackbar snackbar = new JFXSnackbar(root);
    
            List<String> listaDatas = new ArrayList();
            listaDatas.add("Kim");
            listaDatas.add("John");
            listaDatas.add("Chris");
    
            AtomicInteger counter = new AtomicInteger();
            Timeline threeSecondsWonder= new Timeline(new KeyFrame(Duration.seconds(3), new EventHandler<ActionEvent>()
            {
                @Override
                public void handle(ActionEvent event)
                {
                    snackbar.show("Happy birthday " + listaDatas.get(counter.getAndIncrement()) + "!", 2000);
                }
            }));
    
            threeSecondsWonder.setCycleCount(listaDatas.size());
            threeSecondsWonder.play();
    
            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);
        }
    
    }
    

    更新:在答案中使用JFXSnackbar

    【讨论】:

    • 效果很好,谢谢!我只需要做一个小改编,因为当一个人不是生日的时候,他同样会期待 3 秒,所以在一个有 1000 人的记录中,只有一个是生日的,他会等待 3000 秒才显示吐司
    猜你喜欢
    • 2015-10-03
    • 2019-04-28
    • 1970-01-01
    • 2023-03-05
    • 2011-10-19
    • 2021-03-23
    • 2016-04-05
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多