2016-07-07 507 views
2

我有一个应用程序与2个阶段,我不想让用户关闭第二阶段,只是iconify它。如何最小化靠近系统托盘的javafx阶段?

目前我使用的oncloseRequest处理程序最小化窗口 -

secondaryStage.setOnCloseRequest(event -> { 
    secondaryStage.setIconified(true); 
    event.consume(); 
}); 

我想,当用户关闭窗口显示在系统托盘中的图标。用户应该能够从托盘重新打开窗口。

另外,如何确保初级阶段关闭时,第二阶段也关闭?

+2

有n o在javafx中的内置功能。这可以通过一些工具(在Windows中)将应用程序图标化为系统托盘来完成。只有一个是在https://docs.oracle.com/javase/tutorial/uiswing/misc/systemtray.html中。如果你说德语,有一个很好的指南可以让它发生在javafx上:http:// blog。 essential-bytes.de/wie-man-javafx-applikationen-in-das-system-tray-verbannt/或英文jewelsea:https://gist.github.com/jewelsea/e231e8​​9e8d36ef4e5d8a – NwDev

+0

谢谢!当初级舞台关闭时,我该如何关闭第二个窗口? –

回答

0

另外,如何确保初级阶段关闭时,第二阶段 也关闭?

您可以使用这样的事情来关闭第二阶段,当初级阶段关闭:

primaryStage.setOnCloseRequest((WindowEvent we) -> { 
    secondaryStage.close(); 
} 
+0

因为另一个onCloseRequest处理程序,这不就是iconify secondaryStage吗? – Puce

+0

您可以将if语句添加到辅助onCloseRequest处理程序,该处理程序检查主要阶段是否正在关闭 – Kaman

1

坐落在启动方法下列财产

Platform.setImplicitExit(false); 

然后设置上紧密事件

secondaryStage.setOnCloseRequest(event -> { 
    // Your code here 
}); 

为了使ystem托盘尝试以下代码:

原始文档链接: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."); 
    } 

实施例的系统托盘图像:

System tray program example

要从AWT事件处理程序调用的JavaFX的方法可能会follw以下方式:

yourAwtObject.addActionListener(e -> { 
    Platform.runLater(() -> primaryStage.show()); 
});