Java 如何捕获窗口最小化事件?

Java 如何捕获窗口最小化事件?,java,swing,system-tray,Java,Swing,System Tray,我想创建一个JFrame实例,点击它的最小化按钮,我想把它隐藏到系统托盘,通常是windows的任务栏 我知道,通过使用java.awt包中的SystemTray类,我可以做到这一点,但我既没有得到任何关于它的教程,也没有得到任何工作程序示例 我在这里问这个问题是为了获得SystemTray类教程站点的链接,或者如果有人知道如何捕获窗口最小化事件,这是一个有效的示例 private void windowStateChanged(java.awt.event.WindowEvent evt) {

我想创建一个
JFrame
实例,点击它的
最小化按钮
,我想把它隐藏到
系统托盘
,通常是windows的
任务栏

我知道,通过使用
java.awt
包中的
SystemTray
类,我可以做到这一点,但我既没有得到任何关于它的教程,也没有得到任何工作程序示例

我在这里问这个问题是为了获得
SystemTray
类教程站点的链接,或者如果有人知道如何捕获窗口最小化事件,这是一个有效的示例

private void windowStateChanged(java.awt.event.WindowEvent evt) {
    // Use getExtendedstate here.
}

WindowListener界面和
JFrame
addWindowListener()
方法应帮助您确定帧何时被最小化。

这将捕获窗口最小化事件并创建一个托盘图标。它还将从任务栏中删除窗口,并在任务栏图标上添加一个侦听器,以便鼠标单击可恢复窗口。代码有点零碎,但对于您的学习目的来说应该足够好:

public class Qwe extends JFrame {

public static void main(String[] args) {
    final Qwe qwe = new Qwe();

    qwe.addWindowStateListener(new WindowStateListener() {
        public void windowStateChanged(WindowEvent e) {
            if (e.getNewState() == ICONIFIED) {
                try {
                    final TrayIcon trayIcon = new TrayIcon(new ImageIcon("/usr/share/icons/gnome/16x16/emotes/face-plain.png").getImage());
                    trayIcon.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mouseClicked(MouseEvent e) {
                            qwe.setVisible(true);
                            SystemTray.getSystemTray().remove(trayIcon);
                        }
                    });
                    SystemTray.getSystemTray().add(trayIcon);
                    qwe.setVisible(false);
                } catch (AWTException e1) {
                    e1.printStackTrace();
                }
            }
        }
    });
    qwe.setSize(200, 200);
    qwe.setVisible(true);
}

}

最好的办法是如下所示

(一)

2) 将
jpopmenu
添加到
SystemTray的图标中

3) 为(在您的情况下)设置
DefaultCloseOperation

  • 通过使用
    setDefaultCloseOperation(JFrame.DO\u NOTHING\u ON\u CLOSE)

  • 在其他情况下,总是工作
    setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)

  • 请注意不要忘记声明
    系统。退出(1)
    系统托盘的JPOppMenu
    ,从
    JMenuItem
    或另一个
    操作/事件
    ,因为在这种形式下,currenet JVM在PC关机或重新启动之前从未离开本机操作系统


也许这两个链接都会有帮助,在Sun/Oracle的教程网站上有什么例子吗?
frame.addWindowListener(new WindowAdapter() {@Override
    public void windowIconified(WindowEvent e) {}
});