【问题标题】:How to trap the Window minimizing event?如何捕获窗口最小化事件?
【发布时间】:2011-11-21 15:47:04
【问题描述】:

我想创建一个JFrame 实例,点击它的minimize button,我想把它隐藏到System Tray,通常是windows 的taskbar

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

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

【问题讨论】:

标签: java swing system-tray


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      最好的方法是创建跟随

      1) SystemTray

      2) 将JPopopMenu 添加到SystemTray's Icon

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

      • 通过使用WindowListenersetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

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

      • 1234563 /p>

      【讨论】:

        【解决方案4】:
        private void windowStateChanged(java.awt.event.WindowEvent evt) {
            // Use getExtendedstate here.
        }
        

        【讨论】:

        • Sun/Oracle的教程网站上有没有例子?
        【解决方案5】:
        frame.addWindowListener(new WindowAdapter() {@Override
            public void windowIconified(WindowEvent e) {}
        });
        

        【讨论】:

          猜你喜欢
          • 2013-10-07
          • 1970-01-01
          • 2010-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-13
          • 1970-01-01
          相关资源
          最近更新 更多