由於本次專題內會使用到定期更新的功能,必須將系統常駐,但又不可能總是縮小在工作列上,所以這次使用 SystemTray、 TrayIcon ,以及各種觸發事件傾聽來達到縮小至系統托盤上的效果:
public class surface extends JFrame{
SystemTray systray; //桌面上的系統托盤
TrayIcon trayicon; //本程式在系統托盤上的圖示與功能
public surface(){
try{
systray=SystemTray.getSystemTray();
//獲取系統托盤的實例
trayicon=new TrayIcon(ImageIO.read(new File("D:\\login.gif")),"RSS");
//建立程式位於系統托盤的樣式
addWindowListener(action);
//視窗縮小時的觸發事件
trayicon.addMouseListener(action);
//滑鼠點選成程式的系統托盤樣式時的觸發事件
systray.add(trayicon);
//將程式的系統托盤樣式加入到桌面系統托盤
}catch(IOException e){
System.out.println(e.getLocalizedMessage());
}catch(AWTException e){
System.out.println(e.getLocalizedMessage());
}catch(UnsupportedOperationException e){
System.out.println(e.getLocalizedMessage());
}
}
}
public class action implements WindowListener, MouseListener{
long clicktime=0;
public void windowIconified(WindowEvent e) {
//按下最小化按鈕
surface.dispose();
//釋放包含 JFrame 的所有元件在本機螢幕上的資源
}
public void mouseClicked(MouseEvent e) {
//滑鼠點擊
if(isDoubleClick()==true){ //是否短時間內點擊兩下
surface.setExtendedState(Frame.NORMAL);
//設定 JFrame 狀態
surface.setVisible(true);
}
}
public Boolean isDoubleClick(){
//判斷是否快速滑鼠點擊兩下
long newtime=(new Date()).getTime();
if((newtime-clicktime)<300){ //時間間隔
clicktime=newtime;
return true;
}else{
clicktime=newtime;
return false;
}
}
}
上述的程式碼還有一個小問題:當程式關閉後,程式的系統托盤樣式還會殘留在系統托盤上,必須滑鼠觸碰才會消失,目前還在解決這項問題。
參考資料:
大大您好: 感謝您的這篇文章讓在下學習不少,也因而找到了您的問題解決方式,只要用 tray.remove(trayIcon); 應該就能解決您所說的托盤會殘留圖案的問題,與您分享^^
回覆刪除謝謝您的分享這個方法, 我倒是沒想到可以使用這函數來解決 ^^
刪除