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.
}
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关机或重新启动之前从未离开本机操作系统操作/事件
frame.addWindowListener(new WindowAdapter() {@Override
public void windowIconified(WindowEvent e) {}
});