javafx - 如何使用 JFoenix 等待显示下一个 toast (snackBar)
问题描述
我有以下在程序启动时运行的代码。它用于通过 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 类,但无济于事。
解决方案
这是使用此处代码的一种方法。
此代码用于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
在答案中使用。
推荐阅读
- python - Tkinter:更改画布像素大小
- arrays - 从函数修改时,char * 数组不再有效 (C99)
- emulation - Trace Enable 在劳特巴赫是什么意思?
- c++ - 关于 C++ 中命名空间的一个非常基本的问题
- forms - 如何使用带有组合框的表单更新 ms 访问表
- android - 禁用 NavHost 动画
- c# - 精炼 Eikon 登录消息
- java - Hibernate/Spring Data JPA 规范连接
- firebase-realtime-database - SSE 侦听器如何影响对 fireabase 实时数据库的读取操作限制?
- angular - 如何使用添加控件向表单组添加值