前言
桌面应用少不了要用到系统托盘,但是JavaFX并没有给我们提供系统托盘(至少我没找见),不过也不要紧,我们可以用java.awt.SystemTray。
1、创建系统托盘,并添加显示、隐藏、退出按钮
// 我们的自定义系统托盘
class MySysTray {
private TrayIcon trayIcon = null;
private Timeline timeline = new Timeline();
public void initSystemTray() {
// 1、创建托盘按钮
PopupMenu popupMenu = new PopupMenu();
MenuItem showItem = new MenuItem("显示"); popupMenu.add(showItem);
MenuItem hideItem = new MenuItem("隐藏"); popupMenu.add(hideItem);
MenuItem quitItem = new MenuItem("退出"); popupMenu.add(quitItem);
// 2、创建动作事件监听器(awt的古老操作)
ActionListener actionListener = new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
// 多次使用显示和隐藏设置false
Platform.setImplicitExit(false);
// 获得按钮并执行相应操作
MenuItem item = (MenuItem) e.getSource();
if (item.getLabel().equals("退出")) {
// 移除托盘图标
SystemTray.getSystemTray().remove(trayIcon);
// 关闭应用
Platform.exit();
// 延迟500毫秒关闭进程
Timeline timeline = new Timeline();
timeline.setCycleCount(1);
timeline.setAutoReverse(false);
KeyFrame keyFrame = new KeyFrame(Duration.millis(500), new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
// 彻底退出进程
System.exit(0);
}
});
timeline.getKeyFrames().clear();
timeline.getKeyFrames().add(keyFrame);
timeline.play();
}
else if (item.getLabel().equals("显示")) {
Platform.runLater(new Runnable() {
public void run() {
stage.show();
}
});
}
else if (item.getLabel().equals("隐藏")) {
Platform.runLater(new Runnable() {
public void run() {
stage.hide();
}
});
}
}
};
// 3、给按钮添加动作事件监听
showItem.addActionListener(actionListener);
quitItem.a