JavaFX开发调用AWT创建系统托盘MenuItem菜单中文乱码

打开系统托盘MenuItem只能显示英文字符和中文显示方框

解决办法:

  • 打开Edit Configurations…

在这里插入图片描述

  • 选择Mofidy options

在这里插入图片描述

  • 勾选Add VM options

在这里插入图片描述
在VM optios中填入以下代码

-Dfile.encoding=GBK

在这里插入图片描述

### 使用JavaFX 实现系统托弹功能 为了在 Java 应用程序中使用 JavaFX 创建系统托盘图标,可以利用 `javafx.stage.Stage` 和 `java.awt.TrayIcon` 的组合来完成此操作。由于 JavaFX 自身并不直接提供创建系统托盘图标的 API, 需要借助 AWT (Abstract Window Toolkit) 来补充这部分功能[^1]。 下面是一个简单的例子展示如何集成这两者: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.MenuItem; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.stage.Stage; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class SystemTrayExample extends Application { private TrayIcon trayIcon; @Override public void start(Stage primaryStage) { if (!SystemTray.isSupported()) { System.out.println("SystemTray is not supported"); return; } final PopupMenu popup = new PopupMenu(); MenuItem defaultItem = new MenuItem("Default Item"); defaultItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "This is the default item."); } }); MenuItem exitItem = new MenuItem("Exit"); exitItem.addActionListener(e -> Platform.exit()); popup.add(defaultItem); popup.addSeparator(); popup.add(exitItem); Image image = new Image(getClass().getResourceAsStream("/icon.png")); ImageIcon icon = new ImageIcon(image.getUrl()); trayIcon = new TrayIcon(icon.getImage(), "Tooltip text", popup); try { SystemTray.getSystemTray().add(trayIcon); } catch (AWTException e) { System.err.println("Can't add to system tray!"); e.printStackTrace(); } Scene scene = new Scene(new ImageView(image), 300, 250); // Just a placeholder UI. primaryStage.setScene(scene); primaryStage.setTitle("JavaFX and System Tray Demo"); primaryStage.setOnCloseRequest(event -> { event.consume(); // Don't close immediately. hideApplication(primaryStage); }); primaryStage.show(); } private void hideApplication(Stage stage) { stage.hide(); int result = JOptionPane.showConfirmDialog( null, "Do you want to minimize this application?", "Minimize", JOptionPane.YES_NO_OPTION ); if (result == JOptionPane.NO_OPTION || result == JOptionPane.CLOSED_OPTION) { stage.show(); } else { // User chose Yes or closed 'X' dialog window while question was asked. trayIcon.displayMessage("JavaFX App Minimized", "I'm still running!", TrayIcon.MessageType.INFO); } } } ``` 这段代码展示了如何通过结合 JavaFXAWT 来设置一个带有上下文菜单系统托盘项,并处理应用程序最小化到托盘的行为[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值