如何讓java程式最小化至系統托盤

earl_yuan發表於2013-04-30

下面的這個程式簡單地實現了把java應用程式縮小到托盤的方法.

程式執行的jdk要是1.6才行,因為這是J2SDK1.6新加的一些類和方法.

程式中實測必須是16*16的圖片才行

import java.awt.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import javax.imageio.ImageIO;

public class Test extends JFrame{
    private TrayIcon trayIcon;//托盤圖示
    private SystemTray systemTray;//系統托盤
         
    public Test()
    {
        super("系統托盤圖示");
        systemTray = SystemTray.getSystemTray();//獲得系統托盤的例項 
        setSize(150,150); 
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setVisible(true);    
        try {
            trayIcon = new TrayIcon(ImageIO.read(new File("0.gif")));
            systemTray.add(trayIcon);//設定托盤的圖示,0.gif與該類檔案同一目錄
        }
        catch (IOException e1) {e1.printStackTrace();}
        catch (AWTException e2) {e2.printStackTrace();}
        
        this.addWindowListener(
                new WindowAdapter(){   
                    public void windowIconified(WindowEvent e){   
                        dispose();//視窗最小化時dispose該視窗 
                    }   
                });
        
        trayIcon.addMouseListener(
                new MouseAdapter(){
                    public void mouseClicked(MouseEvent e){
                        if(e.getClickCount() == 2)//雙擊托盤視窗再現
                            setExtendedState(Frame.NORMAL);
                            setVisible(true);
                    }
                });        
    }  

    public static void main(String args[])
    {
        new Test();
    }
}


package awt;

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.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;


public class TrayDemo extends JFrame {

private TrayIcon trayIcon = null; // 托盤圖示

private SystemTray tray = null; // 本作業系統托盤的例項

public static TrayDemo trayDemo = new TrayDemo();

private TrayDemo() {
   init();
}

public void init() {
   if (SystemTray.isSupported()) { // 如果作業系統支援托盤
    this.tray();
   }
   this.setSize(300, 200);  
   this.setResizable(false);
   // 視窗關閉時觸發事件  
   addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
     System.exit(0);
    }

    public void windowIconified(WindowEvent e) {    
     try {
      tray.add(trayIcon); // 將托盤圖示新增到系統的托盤例項中
      //setVisible(false); // 使視窗不可視
      dispose();
     } catch (AWTException ex) {
      ex.printStackTrace();
     }
    }   
   });

}

private void tray() {

   tray = SystemTray.getSystemTray(); // 獲得本作業系統托盤的例項
   ImageIcon icon = new ImageIcon("images/30.gif"); // 將要顯示到托盤中的圖示

   PopupMenu pop = new PopupMenu(); // 構造一個右鍵彈出式選單
   MenuItem show = new MenuItem("開啟程式(s)");
   MenuItem exit = new MenuItem("退出程式(x)");
   pop.add(show);
   pop.add(exit);
   trayIcon = new TrayIcon(icon.getImage(), "車輛管理系統", pop);

   /**
   * 新增滑鼠監聽器,當滑鼠在托盤圖示上雙擊時,預設顯示視窗
   */
   trayIcon.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
     if (e.getClickCount() == 2) { // 滑鼠雙擊
      tray.remove(trayIcon); // 從系統的托盤例項中移除托盤圖示
      setExtendedState(JFrame.NORMAL);
      setVisible(true); // 顯示視窗
      toFront();     
     }
    }
   });
   show.addActionListener(new ActionListener() { // 點選“顯示視窗”選單後將視窗顯示出來
      public void actionPerformed(ActionEvent e) {
       tray.remove(trayIcon); // 從系統的托盤例項中移除托盤圖示
       setExtendedState(JFrame.NORMAL);
       setVisible(true); // 顯示視窗
       toFront();
      }
     });
   exit.addActionListener(new ActionListener() { // 點選“退出演示”選單後退出程式
      public void actionPerformed(ActionEvent e) {
       System.exit(0); // 退出程式
      }
     });

}

/**
* 顯示資訊
*/
// 返回單一的例項物件
public static TrayDemo getInstanceTrayDemo() {
   return trayDemo;
}

// 處理視窗事件

}


相關文章