爪哇語任務托盤(系統托盤) 圖示顯示/閃爍
爪哇語任務托盤(系統托盤) 圖示顯示並閃爍。
實用程式類別是 Java SE 6 Mustang 中新增的功能。 java.awt.SystemTray ,,java.awt.TrayIcon 使用類別。我們還將介紹一個範例應用程序,以便您了解如何使用它。
系統托盤(任務托盤)功能
系統托盤(任務托盤)是位於電腦螢幕右下角的一排小圖示。在 Java SE 6 中,新增了以下類別來使用系統托盤功能。
- java.awt.SystemTray
SystemTray 類別代表桌面系統匣。 - java.awt.TrayIcon
TrayIcon 物件表示可以新增到系統托盤的托盤圖示。
如何建立閃爍的圖標
您可能想要使用下列網站來建立閃爍的圖示。
透過上傳本機圖示建立閃爍圖示。
https://www.bannerkoubou.com/anime/
範例應用程式
範例應用程式使用系統托盤實用程式類別TaskTrayUtil 來實作以下功能。
- 何時開始任務托盤到圖示展示。
- 點選【閃爍按鈕】即可任務托盤圖示將會閃爍。
氣球上還顯示「讓我離開這裡!!」的訊息。 - 點選[取消按鈕]可取消圖示閃爍。
- 任務托盤按一下該圖示左鍵即可將主視窗顯示到桌面上。
- 任務托盤右鍵點選該圖示可顯示預設的 PopupMenu 選單。
- 當主視窗最小化時任務托盤保存在.
取得原始碼
原始碼可以從下面獲得。另外,編譯時請將以下圖示儲存在與原始碼相同的位置。
導入 javax.swing.ImageIcon;
導入 javax.swing.JButton;
導入 javax.swing.JFrame;
導入javax.swing.JPanel;
導入 javax.swing.SwingUtilities;
導入 javax.swing.UIManager;
/**
* 在Java中顯示/閃爍任務托盤(系統托盤)圖示。
*
* ◆ 本課程概述
* TaskTray 類別是處理任務托盤的實用程式。
* 提供以下功能:
* ・在任務托盤中顯示圖示。
* - 在任務托盤中顯示彈出訊息。
* - 使任務托盤閃爍。
*
* ◆ 使用方法
* 將目標 JFrame 類別傳遞給下面的方法參數。
* ・createTray(JFrame targetFrame)
* ・createTray(最終JFrame targetFrame, Image映像, PopupMenu選單)
*
*/
公共類別 TaskTrayUtil {
私人靜態 JFrame 框架;
私有靜態 PopupMenu 預設選單;
私有靜態 TrayIcon 托盤圖示;
私人靜態 SystemTray 托盤 = SystemTray.getSystemTray();
私人靜態物件 INSTANCE_LOCK = new Object();
/**
* 執行範例
* @參數參數
*/
公共靜態無效主(字串[] args){
嘗試 {
// 將 LookAndFeel 設定為 Windows
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
// 常規圖標
最終影像 img = new ImageIcon(
TaskTrayUtil.class.getResource(
“tray_icon.gif”)).getImage();
最終 JFrame 幀 =
new JFrame(“在任務托盤中顯示/閃爍圖示”);
框架.setSize(300, 100);
框架.setIconImage(img);
// 視窗最小化時儲存在任務匣中
// 新增 WindowListener 類,如圖所示。
frame.addWindowListener(new WindowAdapter() {
公共無效windowIconified(WindowEvent e){
框架.setVisible(假);
}
});
JPanel jPanel = new JPanel();
jPanel.setLayout(new FlowLayout());
jPanel.setSize(new Dimension(219, 70));
// 閃爍圖示
最終影像 imgLight =
新的 ImageIcon(TaskTrayUtil.class.getResource(
“tray_icon_light.gif”)).getImage();
JButton lightButton = new JButton(“閃爍”);
lightButton.addActionListener(new ActionListener(){
公共無效actionPerformed(ActionEvent e){
onAndOffLight(imgLight, null);
displayMessage(“訊息”,“帶我離開這裡!!”);
}
});
JButton cancelButton = new JButton(“取消”);
取消按鈕.addActionListener(new ActionListener(){
公共無效actionPerformed(ActionEvent e){
用刪除替換圖像(img);
}
});
jPanel.add(lightButton, null);
jPanel.add(cancelButton, null);
框架.add(jPanel);
// 結束處理。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 在螢幕中央顯示框架。
框架.setLocationRelativeTo(null);
// 建立任務托盤。
TaskTrayUtil.createTray(frame);
框架.setVisible(true);
} catch (異常 e) {
e.printStackTrace();
}
}
/**
*
*/
靜止的 {
建立彈出式選單();
}
/**
* 產生一個預設的 PopupMenu 選單,顯示在任務匣中。
*提供以下菜單。
* ・“從任務托盤中刪除”
* 將目標應用程式從任務托盤移動到桌面
* 把它拿出來。
*(啟動視窗並將其置於最前面。)
* - 終止要終止的應用程式。
*/
私有靜態無效createPopupMenu(){
MenuItem getTrayItem = new MenuItem(“從任務匣中刪除”);
getTrayItem.addActionListener(new ActionListener() {
公共無效actionPerformed(ActionEvent e){
積極的();
}
});
MenuItem exitItem = new MenuItem(“退出”);
exitItem.addActionListener(new ActionListener() {
公共無效actionPerformed(ActionEvent e){
刪除托盤圖示();
TaskTrayUtil.frame.setVisible(false);
TaskTrayUtil.frame.dispose();
系統.退出(0);
}
});
預設選單=新的彈出式選單();
defaultMenu.add(getTrayItem);
defaultMenu.add(exitItem);
}
/**
* 建立一個托盤圖示並將其新增至系統托盤。
* 為targetFrame設定圖示上發生的事件的監聽器
設定 *.
* 這裡的事件是當您雙擊托盤圖示時。
* 提取目標應用程式。
* @param targetFrame 目標應用程式
*/
公共靜態無效createTray(JFrame targetFrame){
createTray(targetFrame, null, null);
}
/**
* 建立一個托盤圖示並將其新增至系統托盤。
*
* @param targetFrame 目標應用程式
* @param image 要在托盤圖示上顯示的圖像。
* 如果為null,可以透過getIconImage()從targetFrame中取得
* 使用影像影像。
* @param menu PopupMenu 顯示在任務托盤中。
* 如果為null,則顯示預設的PopupMenu。
*/
公共靜態無效createTray(最終JFrame targetFrame,映像映像,
彈出式選單選單){
// 如果系統托盤不支援則退出。
if (!SystemTray.isSupported()) {
返回;
}
TaskTrayUtil.frame = targetFrame;
如果(圖像==空){
圖像 = targetFrame.getIconImage();
}
如果(菜單==空){
選單=預設選單;
}
托盤Icon = new TrayIcon(映像, targetFrame.getTitle(), 選單);
托盤圖示.setImageAutoSize(true);
托盤Icon.addMouseListener(新MouseAdapter(){
公共無效滑鼠點擊(MouseEvent e){
如果 (SwingUtilities.isLeftMouseButton(e)) {
積極的();
}
}
});
嘗試 {
托盤.add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}
}
/**
* 從任務托盤中刪除圖示。
* 必須在應用程式退出時呼叫。
*/
公共靜態無效removeTrayIcon(){
托盤.刪除(trayIcon);
}
/**
* 使任務托盤圖示閃爍。
* @param msg 如有必要,請點擊閃爍圖示時
* 設定要顯示的訊息。
*/
公共靜態無效onAndOffLight(圖像lightImg,字串msg){
替換影像(lightImg);
更改LightImgAdapter adap =
new TaskTrayUtil().new ChangeLightImgAdapter(msg);
托盤圖示.addMouseListener(adap);
Frame.addWindowListener(adap);
}
/**
* 更改任務托盤圖示。
* @param image 僅當與目前圖示不同時才變更。
*/
公共靜態無效替換圖像(圖像圖像){
同步(INSTANCE_LOCK){
if (!image.equals(trayIcon.getImage())) {
托盤圖示.setImage(圖片);
}
}
}
/**
* 更改任務托盤圖示。
* *如果您想恢復因某種原因閃爍的圖標,
* 除非用{@link SystemTray#remove(TrayIcon)})刪除它,否則它似乎沒有用。
* @param image 僅當與目前圖示不同時才變更。
*/
公共靜態無效replaceImageWithDelete(圖像圖像){
同步(INSTANCE_LOCK){
if (!image.equals(trayIcon.getImage())) {
托盤.刪除(trayIcon);
托盤圖示.setImage(圖片);
嘗試 {
托盤.add(trayIcon);
} catch (異常 e) {
e.printStackTrace();
}
}
}
}
/**
* 在任務托盤中顯示彈出訊息。
* @參數標題
* @參數文本
*/
公共靜態無效displayMessage(字串標題,字串文字){
if (標題!= null || 文字!= null) {
托盤圖示.displayMessage(標題,文本,
TrayIcon.MessageType.INFO);
}
}
/**
* 將目標應用程式從任務托盤移動到桌面
* 把它拿出來。
*/
私人靜態無效活動(){
// 將幀狀態恢復到正常狀態。
TaskTrayUtil.frame.setExtendedState(JFrame.NORMAL);
TaskTrayUtil.frame.setAlwaysOnTop(true);
TaskTrayUtil.frame.setVisible(true);
TaskTrayUtil.frame.setAlwaysOnTop(false);
}
/**
* 點選閃爍圖示時產生的事件
* 監聽類。
*/
類別 ChangeLightImgAdapter 實作 WindowListener、MouseListener {
字串 lightImageText;
公共ChangeLightImgAdapter(字串lightImageText){
this.lightImageText = lightImageText;
}
/**
* 點選任務托盤圖示時
* 顯示彈出訊息。
*/
公共無效mousePressed(MouseEvent e){
TaskTrayUtil.displayMessage(null, lightImageText);
}
/**
* 當目標應用程式啟動時閃爍
* 返回圖標。
*/
公共無效視窗啟動(WindowEvent e){
TaskTrayUtil.replaceImageWithDelete(TaskTrayUtil.frame
.getIconImage());
TaskTrayUtil.frame.removeWindowListener(this);
TaskTrayUtil.trayIcon.removeMouseListener(this);
}
公共無效windowClosed(WindowEvent e){}
公無效windowClosing(WindowEvent e){}
公共無效windowDeactivated(WindowEvent e){}
公共無效windowDeiconified(WindowEvent e){}
公共無效windowIconified(WindowEvent e){}
公共無效視窗開啟(WindowEvent e){}
公共無效mouseClicked(MouseEvent e){}
公共無效mouseEntered(MouseEvent e){}
公有無效mouseExited(MouseEvent e){}
公共無效mouseReleased(MouseEvent e){}
}
}