在JavaFX中,可以使用以下步骤将主舞台最小化到系统托盘,并可以通过双击系统托盘图标弹出界面,完整范例代码

一顿摸索,代码如下:

package ToSystemTray;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import javafx.stage.Stage;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

public class StageToSystemTrayCopy extends Application {
private TrayIcon trayIcon;

public static void main(String[] args) {
launch(args);
}

static {
Platform.setImplicitExit(false);//隐式退出开关,设置关闭所有窗口后程序仍不退出
}
@Override
public void start(Stage primaryStage) {
// this.primaryStage = primaryStage;
// 设置舞台的标题和样式
primaryStage.setTitle("JavaFX System Tray Example");
// primaryStage.initStyle(StageStyle.UTILITY);
// 显示主舞台
primaryStage.show();

// 创建系统托盘图标
createTrayIcon(primaryStage);
// 设置窗口关闭事件
primaryStage.setOnCloseRequest(event -> {
hideWindow(primaryStage);
event.consume();
});
}
//创建图标
private void createTrayIcon(Stage primaryStage) {
if (SystemTray.isSupported()) {
// 获取系统托盘
SystemTray tray = SystemTray.getSystemTray();
// 创建弹出菜单
PopupMenu popupMenu = new PopupMenu();
// 创建系统托盘图标
File file = new File("resources/image/tu555.png");
Image image = new Image(file.toURI().toString());
trayIcon = new TrayIcon(SwingFXUtils.fromFXImage(image, null), "JavaFX Stage最小化到系统托盘", popupMenu);
trayIcon.setImageAutoSize(true);
// 创建打开菜单项
MenuItem openMenuItem = new MenuItem("Open");
openMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Open测试");
Platform.runLater(() -> {
System.out.println("Open测试2");
showWindow(primaryStage);
});
}
});
// 创建退出菜单项
MenuItem exitMenuItem = new MenuItem("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Exit测试");
Platform.exit();
tray.remove(trayIcon);
}
});
// 将菜单项添加到弹出菜单
popupMenu.add(openMenuItem);
popupMenu.add(exitMenuItem);
// 将弹出菜单设置到系统托盘图标
trayIcon.setPopupMenu(popupMenu);
// 将系统托盘图标添加到系统托盘
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.out.println("Failed to add tray icon.");
}
// 设置托盘图标双击事件
trayIcon.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Platform.runLater(new Runnable() {
public void run() {
showWindow(primaryStage);
}
});
}
});
} else {
System.out.println("System tray is not supported.");
}
}
//打开窗口
private void showWindow(Stage primaryStage) {
if (primaryStage != null) {
Platform.runLater(() -> {
if (primaryStage.isIconified()) {
primaryStage.setIconified(false);
}
if (!primaryStage.isShowing()) {
primaryStage.show();
}
primaryStage.toFront();
});
}
System.out.println("打开窗口");
}
//关闭窗口
private void hideWindow(Stage primaryStage) {
if (primaryStage != null) {
Platform.runLater(() -> {
primaryStage.hide();
});
}
System.out.println("关闭窗口");
}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值