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

发布于 2024-12-17 09:30:51 字数 271 浏览 3 评论 0原文

我想创建一个 JFrame 实例,然后单击其最小化按钮,我想将其隐藏到系统托盘,这通常是Windows 的任务栏

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

我在这里问这个问题是为了获取 SystemTray 类的教程网站的链接,或者是否有人知道如何捕获窗口最小化事件(一个工作示例)。

I want to create a JFrame instance and on the click of its minimize button, I would like to hide it to the System Tray which is usually the taskbar of windows.

I'd come to know that by using SystemTray class in java.awt package I can do so but neither I'm getting any tutorial on it nor any working program example.

I'd asked this question here to either get the link to tutorial site for SystemTray class or if any body knows how to trap the window minimizing event, a working example.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

小鸟爱天空丶 2024-12-24 09:30:51

WindowListener 接口和 JFrameaddWindowListener() 方法应该可以帮助您确定框架何时最小化。

The WindowListener interface and JFrame's addWindowListener() method should help you determine when the frame has been minimised.

尹雨沫 2024-12-24 09:30:51

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

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);
}

}

This will trap the window minimized event and will create a tray icon. It will also remove the window from the taskbar and it will add a listener on the tray icon so that a mouseclick would restore the window. The code is a bit scrappy but should be good enough for your learning purposes:

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);
}

}
时间海 2024-12-24 09:30:51

最好的方法是创建如下

1) SystemTray

2) 添加JPopopMenuSystemTray 的图标

3) 设置 DefaultCloseOperationTopLevelContainer (在您的情况下 JFrame)

  • 通过使用 WindowListener setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

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

  • 注意不要忘记从 JMenuItem 或另一个 Action/ 声明 System.exit(1)SystemTray 的 JpopupMenu事件,因为在这种形式下,当前的 JVM 永远不会离开本机操作系统,直到 PC 断电或重新启动

best way would be create follows

1) SystemTray

2) add JPopopMenu to the SystemTray's Icon

3) set DefaultCloseOperation for TopLevelContainer (in your case JFrame)

  • by using WindowListener setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  • in other cases always works setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

  • notice don't forget declare System.exit(1) to the SystemTray's JpopupMenu, from JMenuItem or another Action/Event, because in this form currenet JVM never gone from Native OS until PC power-off or restart

叶落知秋 2024-12-24 09:30:51
private void windowStateChanged(java.awt.event.WindowEvent evt) {
    // Use getExtendedstate here.
}
private void windowStateChanged(java.awt.event.WindowEvent evt) {
    // Use getExtendedstate here.
}
黎歌 2024-12-24 09:30:51
frame.addWindowListener(new WindowAdapter() {@Override
    public void windowIconified(WindowEvent e) {}
});
frame.addWindowListener(new WindowAdapter() {@Override
    public void windowIconified(WindowEvent e) {}
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文