JAVA托盤程式SystemTray的心得
</pre><p>因為工作需要,又拾起了很久不用swing,還好沒忘乾淨,需要做一個一直在後臺執行的托盤程式,經過一番努力終於成功了。</p><p>首先你要搞一個JFrame出來,如果你需要視窗,那就加上視窗,如果你只是需要後臺執行,不設定視窗也可以,當然也可以選擇設定了視窗大小,直接隱藏。將Resizable屬性設定為false就可以了。廢話不多說下面是JFrame程式碼<pre name="code" class="java">import javax.swing.JFrame;
public class MainFrame extends JFrame{
//呼叫SetTray()類,設定程式系統托盤功能
//如果需要顯示視窗那就呼叫SetTray的帶引數的方法SetTray()
public MainFrame(){
new SetTray();
}
public void init(){
// this.setTitle("資料庫讀取");
// //設定視窗大小
// this.setSize(300, 200);
// //設定視窗右上角顯示的元件(最大化,最小化,關閉)
// this.setDefaultCloseOperation(3);
// //視窗在螢幕中間顯示
// this.setLocationRelativeTo(null);
//視窗螢幕居中
// center();
// //設定視窗大小不可改變
// this.setResizable(false);
// //設定視窗是否可見
// this.setVisible(true);
//設定jf的佈局方式
// this.setLayout(null);
//設定視窗關閉處理,與關閉窗體事件搭配
// this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
//視窗居中
// private void center()
// {
//獲得當前螢幕的尺寸
// Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
//獲得JFrame尺寸
// Dimension jframeSize=this.getSize();
// setLocation((screenSize.width-jframeSize.width)/2,(screenSize.height-jframeSize.height)/2);
// }
public static void main(String[] args)
{
new MainFrame();
}
}
下面是實現托盤程式的程式碼。
首先我們需要解決的是托盤圖示右鍵選單中文亂碼問題。上網百度了一下,發現情況各異,本人用的是myeclipse10.7的環境,所以設定上有所不同。
右鍵一個java的class檔案(.java),Run As--》Run Configuration
在該選項卡中新增這麼一句話-Dfile.encoding=GB18030
第二要解決的問題,就是載入的托盤圖示在系統托盤圖示顯示出不顯示的問題。
在網上找了n中辦法都不行,最終總結了下面的方法。
被框住的兩句是重點,被註釋掉的程式碼都不能達到顯示托盤圖示的目的。一開始只是加入了setImageAutoSize()屬性,沒效果,無論是跟ImageIcon()還是Toolkit.getDefaultToolkit()方法還有其他方法組合均無效果。
本以為是圖片的格式或者大小引起的不能正常顯示,所以換了圖片大小從256x256換到16x16,格式試過png,jpg,ico等等,無效果。
唯一可行的便是載入ImageIo包,呼叫其read方法獲取Resource。
下面是我的project的結構圖
兩部分都是完整程式碼,可以直接執行。
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class SetTray implements ActionListener
{
PopupMenu popup;
MenuItem open,close;
//工作列程式托盤圖示
TrayIcon trayicon;
JFrame jframe;
public SetTray()
{
//this.jframe=jframe;
//初始化托盤元件
init();
}
public SetTray(JFrame jframe){
this.jframe=jframe;
//初始化托盤元件
init();
}
//初始化程式托盤元件
private void init()
{
popup=new PopupMenu();
/*open=new MenuItem("開啟");
open.addActionListener(this);*/
close=new MenuItem("退出");
close.addActionListener(this);
//popup.add(open);
popup.add(close);
//檢查平臺是否受支援系統托盤
if(SystemTray.isSupported())
{
SystemTray tray=SystemTray.getSystemTray();
//ImageIcon imageIcon=new ImageIcon("cn\\yl\\frame\\8.png"); //獲得托盤顯示圖示
//Image icon=imageIcon.getImage(); //獲得Image物件
//Image icon=this.getToolkit().getImage(this.getClass().getClassLoader().getResource("images/user_edit.png"));
//Image icon = Toolkit.getDefaultToolkit().getImage("d11.ico");
//System.out.println(icon.toString());
//trayicon=new TrayIcon(icon,"java系統托盤",pop);
try {
trayicon = new TrayIcon(ImageIO.read(getClass().getClassLoader().getResource("d11.png")),"Tray demo",popup);
} catch (IOException e1) {
System.out.println("圖片載入失敗!");
}
//關鍵點,設定托盤圖示的自適應屬性,這樣才能在系統顯示托盤處正常顯示出需要的圖片。
trayicon.setImageAutoSize(true);
trayicon.addMouseListener(new MouseAdapter(){
//為托盤新增滑鼠事件,雙擊則開啟程式介面
/*public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
{
openFrame();
}
}*/
});
try{
tray.add(trayicon);
}catch(AWTException e)
{
e.printStackTrace();
}
}
/* //新增窗體事件
jframe.addWindowListener(new WindowListener(){
public void windowActivated(WindowEvent arg0) {
}
//隱藏程式於系統托盤函式,點選視窗的關閉按鈕時彈出提示,更具提示選擇是否隱藏到系統托盤
public void windowClosed(WindowEvent arg0) {
jframe.setVisible(false);
jframe.dispose();
}
public void windowClosing(WindowEvent arg0) {
int a=JOptionPane.showConfirmDialog(jframe,"[是] 退出,[否] 隱藏?","提示",0);
if(a==0){System.exit(0);}
else if(a==1){jframe.setVisible(false);}
}
public void windowDeactivated(WindowEvent arg0) {
}
public void windowDeiconified(WindowEvent arg0) {
}
//視窗最小化
public void windowIconified(WindowEvent arg0) {
jframe.setVisible(false);
}
public void windowOpened(WindowEvent arg0) {
}
});*/
}
//托盤選單
public void actionPerformed(ActionEvent e)
{ //右鍵托盤選單選擇開啟,呼叫openJFrame函式
/*if(e.getSource()==open)
{
openJFrame();
}*/
//退出托盤程式
if(e.getSource()==close)
{
System.exit(-1);
}
}
// //顯示程式介面
// public void openJFrame()
// {
// jframe.setVisible(true);
// jframe.setAlwaysOnTop(true);
// }
}
相關文章
- Winform設定托盤程式,托盤顯示ORM
- swt 簡單的托盤程式
- 如何讓java程式最小化至系統托盤Java
- 【Qt開發】實現系統托盤,托盤選單,托盤訊息QT
- Java中如何使用系統托盤Java
- 托盤程式設計全接觸(轉)程式設計
- 托盤程式設計全接觸 (轉)程式設計
- C# 托盤通知C#
- 系統托盤建立
- QT最小化程式到托盤執行QT
- Delphi托盤程式設計實戰演練 (轉)程式設計
- Avalonia 實現動態托盤
- 托盤程式設計(出處:程式設計愛好者網站)程式設計網站
- 系統托盤中的快捷圖示(轉)
- 在托盤上顯示Balloon Tooltip
- 系統托盤建立M4
- 在托盤上顯示Balloon Tooltip (轉)
- 基於Duilib的win32程式實現最小化到托盤UIWin32
- Java的中文程式設計與配置心得 (轉)Java程式設計
- [心得] Effective Java心得筆記Java筆記
- 在托盤上顯示Balloon Tooltip(VB.NET) (轉)
- VC編制系統托盤的一種實現方法[習作]
- win10托盤圖示不顯示怎麼回事_win10工作列托盤圖示顯示不完全如何修復Win10
- Windows10系統怎麼隱藏托盤圖示Windows
- 烏托邦漂流者的Java學習筆記12Java筆記
- win32gui中操作工作列托盤區的函式Win32GUI函式
- win7系統隱藏NVIDIA托盤圖示的操作方法Win7
- 關於對話方塊最小化到托盤後,點選托盤圖示後只在工作列顯示而無法還原視窗的解決方法。
- JDK6.0的新特性之一:Desktop和SystemTray類JDK
- java實習生學習心得Java
- java反射機制的學習心得Java反射
- 《Sygate Office Network V4.5 Build 851 簡體漢化版 的“隱藏托盤”》UI
- 程式設計心得程式設計
- 自己動手寫類似酷狗播放器(4)_系統托盤的顯示播放器
- 我的合肥java培訓學習心得Java
- synchronized關鍵字 - [JAVA心得]synchronizedJava
- 股市鬼才操盤20年總結的20條投資心得(轉)
- 在 Linux 上為你的任務建立一個自定義的系統托盤指示器Linux