监听到窗口关闭 如何缩小到托盘

在JavaFX应用程序中,有时我们希望在窗口关闭时将应用程序缩小到系统托盘,而不是直接关闭应用程序。这可以为用户提供更方便的体验,同时保持应用程序在后台运行。

解决方案

要实现这个功能,我们需要使用TrayIcon类来创建和管理系统托盘图标,并添加一个窗口关闭事件监听器来实现窗口关闭时将应用程序缩小到系统托盘。

下面是一个简单的示例代码:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;

import java.awt.AWTException;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MinimizeToTrayExample extends Application {

    private TrayIcon trayIcon;

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Minimize to Tray Example");

        primaryStage.setOnCloseRequest(event -> {
            event.consume();
            minimizeToTray(primaryStage);
        });

        StackPane root = new StackPane(new Label("Hello, World!"));
        Scene scene = new Scene(root, 300, 250);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void minimizeToTray(Stage stage) {
        if (!SystemTray.isSupported()) {
            System.out.println("SystemTray is not supported");
            return;
        }

        SystemTray systemTray = SystemTray.getSystemTray();

        trayIcon = new TrayIcon(/* your icon image */);
        trayIcon.addActionListener(event -> {
            stage.show();
            systemTray.remove(trayIcon);
        });

        try {
            systemTray.add(trayIcon);
            stage.hide();
        } catch (AWTException e) {
            e.printStackTrace();
        }
    }

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

在上面的示例中,我们创建了一个简单的JavaFX应用程序,当窗口关闭时,通过setOnCloseRequest方法监听窗口关闭事件,并调用minimizeToTray方法将应用程序缩小到系统托盘。在minimizeToTray方法中,我们创建了一个TrayIcon对象,并添加了一个监听器来处理鼠标单击事件,当用户单击系统托盘图标时,会重新显示应用程序窗口并移除托盘图标。

总结

通过以上的方法,我们可以实现在JavaFX应用程序中监听窗口关闭事件,并将应用程序缩小到系统托盘,为用户提供更便捷的体验。希望这个示例能帮助你解决类似的问题。如果有任何疑问或建议,欢迎留言交流。