我想創建一個JFrame
實例並點擊它的minimize button
,我想將它隱藏到System Tray
這通常是windows的taskbar
。如何捕獲窗口最小化事件?
我會知道,通過使用SystemTray
類java.awt
包我可以這樣做,但我既沒有得到任何教程,也沒有任何工作的程序示例。
我在這裏問這個問題要麼獲得鏈接到教程網站SystemTray
類,或者如果任何機構知道如何陷阱窗口最小化事件,一個工作的例子。
我想創建一個JFrame
實例並點擊它的minimize button
,我想將它隱藏到System Tray
這通常是windows的taskbar
。如何捕獲窗口最小化事件?
我會知道,通過使用SystemTray
類java.awt
包我可以這樣做,但我既沒有得到任何教程,也沒有任何工作的程序示例。
我在這裏問這個問題要麼獲得鏈接到教程網站SystemTray
類,或者如果任何機構知道如何陷阱窗口最小化事件,一個工作的例子。
這將捕獲窗口最小化事件,並將創建一個托盤圖標。它也會從任務欄中刪除窗口,它會在托盤圖標上添加一個偵聽器,這樣鼠標點擊就可以恢復窗口。該代碼是有點零碎,但應足夠好了你的學習目的:
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);
}
}
private void windowStateChanged(java.awt.event.WindowEvent evt) {
// Use getExtendedstate here.
}
在Sun/Oracle的教程網站上有沒有例子? –
當然,請閱讀教程。 – camickr
的WindowListener
接口和JFrame
的addWindowListener()
方法應該可以幫助您確定何時框架已經被最小化。
+1,更清潔.... –
將創造最好的辦法如下
2)添加JPopopMenu
到SystemTray's Icon
3)設置DefaultCloseOperation
爲TopLevelContainer(在你的情況下爲JFrame)
使用WindowListenersetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
總是工作setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
通知不要忘記申報System.exit(1)
到SystemTray's JpopupMenu
,從JMenuItem
或其他Action/Event
,因爲在這種形式currenet JVM永遠也不會消失從Native OS直到PC斷電或重啓
感謝您的步驟明智的解釋。 –
frame.addWindowListener(new WindowAdapter() {@Override
public void windowIconified(WindowEvent e) {}
});
也許這兩個鏈接將幫助http://download.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html和http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/ – HRgiger