java實現(xiàn)系統(tǒng)托盤示例
桌面的系統(tǒng)托盤即當程序最小化或者關(guān)閉按鈕程序并沒有退出,而是最小化在任務(wù)狀態(tài)區(qū)域(Windows系統(tǒng)),當鼠標點擊那個區(qū)域所在的圖標有提示以及其他的操作。在 Microsoft Windows 上,它被稱為“任務(wù)欄狀態(tài)區(qū)域 (Taskbar Status Area)”,在 Gnome 上,它被稱為“通知區(qū)域 (Notification Area)”,在 KDE 上,它被成為“系統(tǒng)托盤 (System Tray)”。系統(tǒng)托盤由運行在桌面上的所有應用程序共享。
jdk1.6 中新增了兩個類來實現(xiàn):
SystemTray和 TrayIcon,以下為詳細介紹:
SystemTray
類介紹:
在某些平臺上,可能不存在或不支持系統(tǒng)托盤,所以要首先使用SystemTray.isSupported()來檢查當前的系統(tǒng)是否支持系統(tǒng)托盤
SystemTray可以包含一個或多個 TrayIcon,可以使用 add(java.awt.TrayIcon)方法將它們添加到托盤,當不再需要托盤時,使用 remove(java.awt.TrayIcon)
移除它。
TrayIcon由圖像、彈出菜單和一組相關(guān)偵聽器組成。每個 Java 應用程序都有一個 SystemTray實例,在應用程序運行時,它允許應用程序與桌面系統(tǒng)托盤建立連接。
SystemTray實例可以通過getSystemTray ()方法獲得。應用程序不能創(chuàng)建自己的 SystemTray
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
/**
*
* @author Mr.LiuTao
*/
public class TrayByJdk extends JFrame implements ActionListener{
private JPanel pane = null;
private JButton button = null; // 啟動托盤圖標的按鈕
private JLabel label = null; // 用來顯示系統(tǒng)是否支持托盤的信息
private TrayIcon trayIcon = null; // 托盤圖標
private Timer shanshuo = null;
private ImageIcon icon1 = null;
private ImageIcon icon2 = null;
private SystemTray tray = null; // 本操作系統(tǒng)托盤的實例
boolean gengai = false;
//采用jdk1.6的托盤技術(shù) 實現(xiàn)跨平臺的應用
public TrayByJdk() {
//super("托盤技術(shù)演示");
icon1 = new ImageIcon("G:\\javaworks\\eclipsework\\山寨QQClient\\images\\16.gif"); // 將要顯示到托盤中的圖標
icon2 = new ImageIcon("G:\\javaworks\\eclipsework\\山寨QQClient\\images\\15.gif"); // 將要顯示到托盤中的圖標
try {
// 將LookAndFeel設(shè)置成Windows樣式
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ex) {
ex.printStackTrace();
}
pane = new JPanel();
button = new JButton("縮小到托盤");
button.setEnabled(false);
label = new JLabel("本操作系統(tǒng)不支持托盤");
pane.add(label);
pane.add(button);
//判斷是否支持托盤
if (SystemTray.isSupported()) {
this.tray();
}
shanshuo = new Timer(1000,this);
shanshuo.start();
this.getContentPane().add(pane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.addWindowStateListener(new WindowStateListener () {
public void windowStateChanged(WindowEvent state) {
if(state.getNewState() == 1 || state.getNewState() == 7) {
yinca();
}
}
});
this.setVisible(false);
System.out.println("=============="+this.isVisible());
}
/**
* 托盤相關(guān)代碼
*/
private void tray() {
label.setText("本操作系統(tǒng)支持托盤");
button.setEnabled(true);
tray = SystemTray.getSystemTray(); // 獲得本操作系統(tǒng)托盤的實例
//ImageIcon icon = new ImageIcon("tray.gif"); // 將要顯示到托盤中的圖標
PopupMenu pop = new PopupMenu(); // 構(gòu)造一個右鍵彈出式菜單
MenuItem show = new MenuItem("顯示窗口");
MenuItem exit = new MenuItem("退出演示");
MenuItem author = new MenuItem("Author");
/**
* TrayIcon有三個構(gòu)造
* TrayIcon(Image image) 用“圖標”來構(gòu)造
* TrayIcon(Image image, String tooltip) 用“圖標”和“ToolTip”構(gòu)造
* TrayIcon(Image image, String tooltip, PopupMenu popup) 用“圖標”,“ToolTip”,“彈出菜單”來構(gòu)造一個托盤圖標
*/
trayIcon = new TrayIcon(icon1.getImage(), "托盤技術(shù)演示", pop);
// 點擊本按鈕后窗口被關(guān)閉,托盤圖標被添加到系統(tǒng)的托盤中
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
tray.add(trayIcon); // 將托盤圖標添加到系統(tǒng)的托盤實例中
setVisible(false); // 使窗口不可視
} catch (AWTException ex) {
ex.printStackTrace();
}
}
});
/**
* 添加鼠標監(jiān)聽器,當鼠標在托盤圖標上雙擊時,默認顯示窗口
*/
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) { // 鼠標雙擊
tray.remove(trayIcon); // 從系統(tǒng)的托盤實例中移除托盤圖標
setVisible(true); // 顯示窗口
}
}
});
show.addActionListener(new ActionListener() { // 點擊“顯示窗口”菜單后將窗口顯示出來
public void actionPerformed(ActionEvent e) {
tray.remove(trayIcon); // 從系統(tǒng)的托盤實例中移除托盤圖標
setVisible(true); // 顯示窗口
}
});
exit.addActionListener(new ActionListener() { // 點擊“退出演示”菜單后推出程序
public void actionPerformed(ActionEvent e) {
System.exit(0); // 退出程序
}
});
author.addActionListener(new ActionListener() { // 點擊“退出演示”菜單后推出程序
public void actionPerformed(ActionEvent e) {
showMessage();
}
});
pop.add(show);
pop.add(exit);
pop.add(author);
}
/**
* 顯示信息
*/
private void showMessage() {
JOptionPane.showMessageDialog(this, new JLabel("這是一個系統(tǒng)托盤"), "消息", JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String[] args) {
new TrayByJdk().yinca();
}
public void yinca(){
try {
tray.add(trayIcon);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 將托盤圖標添加到系統(tǒng)的托盤實例中
setVisible(false); // 使窗口不可視
}
@Override
public void actionPerformed(ActionEvent arg0) {
if(!gengai){
trayIcon.setImage(icon2.getImage());
gengai = true;
}else{
trayIcon.setImage(icon1.getImage());
gengai = false;
}
}
}
相關(guān)文章
java逗號分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換
我們在日常開發(fā)時會經(jīng)常遇到將一個字符串按照逗號進行分割,這篇文章主要給大家介紹了關(guān)于java逗號分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換的相關(guān)資料,文中給出了詳細的代碼示例,需要的朋友可以參考下2024-02-02
java 使用Scanner類接收從控制臺輸入的數(shù)據(jù)方式
這篇文章主要介紹了java 使用Scanner類接收從控制臺輸入的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
java 學習筆記(入門篇)_程序流程控制結(jié)構(gòu)和方法
程序流程控制結(jié)構(gòu)分為:順序、選擇、循環(huán)以及異常處理結(jié)構(gòu),語句是程序的基本組成單位,一般來說語句的執(zhí)行流程是按順序來進行的,但是當遇到一些特殊的條件,比如循環(huán),這時候語句就會按照流程控制結(jié)構(gòu)來進行了2013-01-01
Spring事務(wù)管理只對出現(xiàn)運行期異常進行回滾
Spring的事務(wù)管理默認只對出現(xiàn)運行期異常(java.lang.RuntimeException及其子類)進行回滾,需要了解更多Spring事務(wù)方面的知識,可詳看本文2012-11-11
SpringBoot接口實現(xiàn)百萬并發(fā)的代碼示例
隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的應用需要支持高并發(fā),在這種情況下,如何實現(xiàn)高并發(fā)成為了一個重要的問題,Spring Boot是一個非常流行的Java框架,它提供了很多方便的功能來支持高并發(fā),本文將介紹如何使用Spring Boot來實現(xiàn)百萬并發(fā)2023-10-10

