我有一个包含 2 个阶段的应用程序,我不希望用户关闭第二个阶段,只需将其图标化即可。
目前我正在使用 oncloseRequest 处理程序来最小化窗口 -
secondaryStage.setOnCloseRequest(event -> {
secondaryStage.setIconified(true);
event.consume();
});
当用户关闭窗口时,我想在系统托盘中显示一个图标。并且用户应该能够从托盘重新打开窗口。
另外,我如何确保当初级阶段关闭时,第二阶段也关闭?
最佳答案
在 start 方法中设置以下属性
Platform.setImplicitExit(false);
然后设置关闭事件
secondaryStage.setOnCloseRequest(event -> {
// Your code here
});
要制作系统托盘,请尝试以下代码:
原文档链接:https://docs.oracle.com/javase/tutorial/uiswing/misc/systemtray.html
//Check the SystemTray is supported
if (!SystemTray.isSupported()) {
System.out.println("SystemTray is not supported");
return;
}
final PopupMenu popup = new PopupMenu();
URL url = System.class.getResource("/images/new.png");
Image image = Toolkit.getDefaultToolkit().getImage(url);
final TrayIcon trayIcon = new TrayIcon(image);
final SystemTray tray = SystemTray.getSystemTray();
// Create a pop-up menu components
MenuItem aboutItem = new MenuItem("About");
CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size");
CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip");
Menu displayMenu = new Menu("Display");
MenuItem errorItem = new MenuItem("Error");
MenuItem warningItem = new MenuItem("Warning");
MenuItem infoItem = new MenuItem("Info");
MenuItem noneItem = new MenuItem("None");
MenuItem exitItem = new MenuItem("Exit");
//Add components to pop-up menu
popup.add(aboutItem);
popup.addSeparator();
popup.add(cb1);
popup.add(cb2);
popup.addSeparator();
popup.add(displayMenu);
displayMenu.add(errorItem);
displayMenu.add(warningItem);
displayMenu.add(infoItem);
displayMenu.add(noneItem);
popup.add(exitItem);
trayIcon.setPopupMenu(popup);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.out.println("TrayIcon could not be added.");
}
示例系统托盘图像:
要从 awt 事件处理程序调用 Javafx 的方法,您可以按照以下方式:
yourAwtObject.addActionListener(e -> {
Platform.runLater(() -> primaryStage.show());
});
关于javafx - 如何最小化靠近系统托盘的 javafx 阶段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248247/