【问题标题】: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 接口和JFrame 的addWindowListener() 方法应该可以帮助您确定框架何时被最小化。
【解决方案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);
}
}
【解决方案4】:
private void windowStateChanged(java.awt.event.WindowEvent evt) {
// Use getExtendedstate here.
}
【解决方案5】:
frame.addWindowListener(new WindowAdapter() {@Override
public void windowIconified(WindowEvent e) {}
});