我想创建一个JFrame
实例,点击其minimize button
,我想将其隐藏到System Tray
,这通常是taskbar
的窗口
我知道通过在SystemTray
包中使用java.awt
类,我可以这样做,但我既没有得到任何教程,也没有任何工作程序示例。
我在这里问过这个问题要么获得SystemTray
类教程网站的链接,要么是否有人知道如何捕获窗口最小化事件,这是一个有效的例子。
答案 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)
最好的方法是创建以下
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) {}
});