如何捕获Window最小化事件?

时间:2011-11-21 15:47:04

标签: java swing system-tray

我想创建一个JFrame实例,点击其minimize button,我想将其隐藏到System Tray,这通常是taskbar的窗口

我知道通过在SystemTray包中使用java.awt类,我可以这样做,但我既没有得到任何教程,也没有任何工作程序示例。

我在这里问过这个问题要么获得SystemTray类教程网站的链接,要么是否有人知道如何捕获窗口最小化事件,这是一个有效的例子。

5 个答案:

答案 0 :(得分:5)

WindowListener界面和JFrame的{​​{1}}方法应该可以帮助您确定帧的最小化时间。

答案 1 :(得分:4)

这将捕获窗口最小化事件并将创建一个托盘图标。它还将从任务栏中删除窗口,它将在托盘图标上添加一个监听器,以便鼠标点击将恢复窗口。代码有点杂乱,但应该足以满足您的学习目的:

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 :(得分:2)

最好的方法是创建以下

1)SystemTray

2)将JPopopMenu添加到SystemTray's Icon

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

  • 使用WindowListener setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  • 在其他情况下始终有效setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

  • 请注意,不要忘记System.exit(1)SystemTray's JpopupMenu或其他JMenuItem声明Action/Event,因为在这种形式中,currentnet JVM永远不会从Native OS直到PC电源关闭或重新启动

答案 3 :(得分:1)

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

答案 4 :(得分:0)

frame.addWindowListener(new WindowAdapter() {@Override
    public void windowIconified(WindowEvent e) {}
});