1. 程式人生 > >JAVA新增托盤圖示和托盤彈出式選單

JAVA新增托盤圖示和托盤彈出式選單

很多程式在執行的過程中會在系統的托盤區域新增托盤圖示,方便使用者快捷操作,如QQ等,在JDK1.6及其以後的版本中,JAVA也提供了對系統托盤圖示的支援。
我們以系統上的網路連線托盤圖示為例,首先,我們也準備一張托盤圖示,建議解析度:16*16,支援jpg、gif、png等格式,不支援ico格式的,這是需要注意的。
這裡寫圖片描述

import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import
java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JOptionPane; public class SystemTrayDemo { public static void main(String[] args) { // 判斷是否支援系統托盤 if (SystemTray.isSupported()) { // 獲取圖片所在的URL
URL url = SystemTrayDemo.class.getResource("networking.png"); // 例項化影象物件 ImageIcon icon = new ImageIcon(url); // 獲得Image物件 Image image = icon.getImage(); // 建立托盤圖示 TrayIcon trayIcon = new TrayIcon(image); // 為托盤新增滑鼠介面卡 trayIcon.addMouseListener(new
MouseAdapter() { // 滑鼠事件 public void mouseClicked(MouseEvent e) { // 判斷是否雙擊了滑鼠 if (e.getClickCount() == 2) { JOptionPane.showMessageDialog(null, "SystemTrayDemo"); } } }); // 新增工具提示文字 trayIcon.setToolTip("本地連線\r\n速度:100.0 Mbps\r\n狀態:已連線上"); // 建立彈出選單 PopupMenu popupMenu = new PopupMenu(); popupMenu.add(new MenuItem("禁用(D)")); popupMenu.add(new MenuItem("狀態(S)")); popupMenu.add(new MenuItem("修復(P)")); popupMenu.addSeparator(); popupMenu.add(new MenuItem("更改 Windows 防火牆設定(C)")); popupMenu.addSeparator(); popupMenu.add(new MenuItem("開啟網路連線(O)")); // 為托盤圖示加彈出菜彈 trayIcon.setPopupMenu(popupMenu); // 獲得系統托盤物件 SystemTray systemTray = SystemTray.getSystemTray(); try { // 為系統托盤加托盤圖示 systemTray.add(trayIcon); } catch (Exception e) { e.printStackTrace(); } } else { JOptionPane.showMessageDialog(null, "not support"); } } }

執行結果:

這裡寫圖片描述

這裡寫圖片描述

2018年1月25日補充:
看到有朋友回覆有亂碼的問題,這裡給出解決方案,首先我們要明確亂碼產生的原因是我們使用的字元編碼與系統不匹配。

首先貼一張亂碼的效果
這裡寫圖片描述
這是由於我把檔案的編碼改成了UTF-8,我們可以將其還原回去,重試一下
這裡寫圖片描述

需要注意的是我們在修改檔案編碼的時候會導致當前檔案變成亂碼,簡單的處理就是把當前的內容全選複製,修改完編碼後,全選貼上,這樣就好了

把檔案編碼還原回去之後,再次執行,亂碼問題就解決了。
這裡寫圖片描述
上面是一種解決方式,如果我們不想把檔案編碼還原,我們可以新增JAVA執行引數:-Dfile.encoding=GB18030
這裡寫圖片描述
這樣也可以修復亂碼的問題,大家了可以嘗試一下,如果大家有其他解決方案,也歡迎一起探討。