我正在使用javafx开发一个提醒类型的Java应用程序,它将提醒我有关桌面上弹出的有关该任务的任务。但是我不知道该怎么做。有人可以帮助我吗?
答案 0 :(得分:0)
提醒通知机制
这假定使用 JavaFX 8 。提醒中包含日期和时间字段。每当提醒到期时,该应用程序都会显示一个警告对话框(javafx.scene.control.Alert
控件)。
使用Timer
程序包的TimerTask
和java.util
API实现通知机制。计时器是线程用于安排任务以在将来的后台线程中执行的工具。可以安排任务一次执行或定期执行重复任务。通过扩展TimerTask
定义任务。这是一个实现Runnable
的抽象类; run()
方法具有用于执行此任务的代码。
为提醒通知定义了两个任务。第一个在应用程序启动时运行一次;这会检查所有过期的提醒,并在提醒警报中显示它们。下一个任务计划在应用程序运行期间以固定的时间间隔运行,每分钟(或任何所需的时间间隔)运行。
以下代码段显示了计时器的初始化以及应用程序启动时计时器的任务:
Timer timer = new Timer();
RemindersTask tasks = new RemindersTask();
timer.scheduleAtFixedRate(tasks, zeroDelay, periodOneMinute);
提醒任务
类RemindersTask.java
扩展了TimerTask
并覆盖了run()
抽象方法。 run
方法具有用于检查到期或过期提醒并显示提醒警报的代码。
在以下代码段中,getDueRems()
方法基于提供的谓词(类型为java.util.function.Predicate
)检索所有到期提醒。最初,谓词值设置为:Predicate<Reminder> predicate = ReminderPredicates.OVER_DUE;
-这将通知所有到期提醒,直到应用程序启动-所有过期的提醒。第一次运行任务后,谓词将重置为ReminderPredicates.DUE_NOW
并以在计划计时器开始时设置的规则间隔运行。
以下代码段显示了计时器任务的运行方法:
public void run() {
List<Reminder> dueRems = getDueRems();
showNotifications(dueRems); // shows the multiple notifications in an alert dialog
predicate = ReminderPredicates.DUE_NOW;
}
private List<Reminder> getDueRems() {
ObservableList<Reminder> rems = dataClass.getAllReminders();
return rems.stream()
.filter(predicate)
.collect(Collectors.toList());
}
提醒谓语
java.util.function.Predicate<T>
是一个函数接口,代表一个参数(T
是输入类型)的谓词(布尔值函数)。
以下是一些谓词定义示例(在ReminderPredicates
类中定义为常量),而其他一些则可以根据要求进行定义:
Predicate<Reminder> TODAYS = r -> r.getDate().isEqual(LocalDate.now());
Predicate<Reminder> COMPLETED = r -> (r.getCompleted() == true);
Predicate<Reminder> DUE_NOW = TODAYS.and(COMPLETED.negate());