比如有一个frame,当我单击最小化按纽后,如何让它最小化到系统托盘(即在状态栏出现一个图标),而不是默认的最小化到任务栏?

解决方案 »

  1.   

    看Mustang的文档,这是6.0在Swing方面的一个重大更新
      

  2.   

    呵呵,我今天才下了一个关于系统托盘的程序,地址忘了,他是用Java JNI写的,要的话可以叫我传你,给点偶分就行:)
      

  3.   

    http://www.beehoo.org/index.php?option=com_content&task=view&id=68&Itemid=63
    用JAVA开源实现系统托盘(一)——SysTray for Java 
    网上主要流传有两种方式实现系统托盘:
    1.Windows Tray Icon ( http://jeans.studentenweb.org/java/trayicon/trayicon.html )
    2.SysTray for Java ( http://systray.sourceforge.net/ )
    这两个都是开源的...可以根据上面的下载.
    相对来说,我更喜欢SysTray for Java,原因很简单,SysTray for Java实现了我所要的功能而且相对来说比Windows Tray Icon 要简单.
    使用SysTray是很简单的.下载下来的文件有个例子Example.java,照着这个实现你所需要的功能应该不算困难.
    主要是菜单和按钮的操作,和操作一般的JFrame一样.http://blog.xjtu.edu.cn/user1/1034/archives/2006/64310.shtml 
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import java.io.InputStream;
    import java.net.URI;public class GoMustang
    {
       private TrayIcon trayIcon;
       private String actionMessage = "...";
       
       public static void main (String [] args) throws Exception
       {
          
         SplashScreen splashScreen = SplashScreen.getSplashScreen ();
          if (splashScreen != null)
          {
             pause(3000);
             splashScreen.close();
          }
         
          GoMustang mustang = new GoMustang();
          mustang.createTrayIcon();
       }   public void createTrayIcon() throws Exception
       {
          if (SystemTray.isSupported ())
          {
            System.out.println("System Tray Supported. Creating TrayIcon...");
                
            // create launch browser menu item
            MenuItem launchBrowserItem = new MenuItem("Launch Browser");
            // create action listener for lauch browswer menu item
            ActionListener launchListener = new ActionListener() 
            {
                public void actionPerformed(ActionEvent e) 
                {
                  if (Desktop.isDesktopSupported()) 
                  {
                     actionMessage = "Launched Browser";
                     try
                     {
                        trayIcon.displayMessage("GoMustang!","Lauching Browser...", TrayIcon.MessageType.INFO);
                        Desktop desktop = Desktop.getDesktop();
                        desktop.browse(new URI("http://localhost/"));
                        trayIcon.setToolTip("GoMustang!");
                     }
                     catch(Exception exp)
                     {                 
                     }
                  }
                }
            };        
            // add listener to launch browser menu item
            launchBrowserItem.addActionListener(launchListener);        // create exit menu item
            MenuItem exitItem = new MenuItem("Exit");
            // create action listeners for exit menu items
            ActionListener exitListener = new ActionListener() 
            {
                public void actionPerformed(ActionEvent e) 
                {
                    System.exit(0);
                }
            };
            // add action listener to exit menu item
            exitItem.addActionListener(exitListener);
            
            // create popup menu
            PopupMenu popup = new PopupMenu();        // Add exit and launch browser menu items to Popup Menu
            // Order in which MenuItems are added to PopupMenu determines the order in which they are displayed
            popup.add(launchBrowserItem);
            System.out.println("Added Launch Browser MenuItem To PopupMenu");
            
            // add exit menutime to popup
            popup.add(exitItem);
            System.out.println("Added Exit MenuItem To PopupMenu");
                    
            // Get the tray icon's image from JAR 
            InputStream in = getClass().getResourceAsStream("gomustang.gif");
            byte buffer[] = new byte[in.available()];
            for (int i = 0, n = in.available(); i<n; i++)
                buffer[i] = (byte)in.read();        
            Image image = Toolkit.getDefaultToolkit().createImage(buffer);
            System.out.println("Retreived TrayIcon Image From JAR");        // Create system tray Icon with Image, title text and Popup menu we just created
            trayIcon = new TrayIcon(image, "Go Mustang!", popup);
            
            // The imagesize adjusts to available space
            trayIcon.setImageAutoSize(true);
            
            // Create Action Listeners. It displays the Message
            ActionListener actionListener = new ActionListener() 
            {
                public void actionPerformed(ActionEvent e) 
                {
                    trayIcon.displayMessage("Latest Gallops", actionMessage, TrayIcon.MessageType.INFO);
                }
            };
            trayIcon.addActionListener(actionListener);
            System.out.println("Added ActionListener To TrayIcon");        
            // create Mouse Listeners. These currently do not do much
            MouseListener mouseListener = new MouseListener() 
            {
                public void mouseClicked(MouseEvent e) 
                {
                    System.out.println("TrayIcon - Mouse Clicked");                 
                }            public void mouseEntered(MouseEvent e) 
                {
                    System.out.println("TrayIcon - Mouse Entered");                 
                }            public void mouseExited(MouseEvent e) 
                {
                    System.out.println("TrayIcon - Mouse Exited");                 
                }            public void mousePressed(MouseEvent e) 
                {
                    System.out.println("TrayIcon - Mouse Pressed");                 
                }            public void mouseReleased(MouseEvent e) 
                {
                    System.out.println("TrayIcon - Mouse Released");                 
                }
            };
            trayIcon.addMouseListener(mouseListener);
            System.out.println("Added MouseListener To TrayIcon");        SystemTray systemTray = SystemTray.getSystemTray();
            systemTray.add(trayIcon);
            System.out.println("...TrayIcon Successfully Added To SystemTray");
        }
        else
        {
            System.out.println ("SystemTray Not Supported By Operating System");
        }
       }
       
       public static void pause(int milliSeconds) throws Exception
       { 
          System.out.println("Pausing For " + milliSeconds/1000 + " Seconds...");      
          Thread.sleep (milliSeconds); // Pause milli seconds 
       }
    }
      

  5.   

    另外一个前提是你必须装最新的J2SE6.0的Beta版本,其J2SE6.0的java.awt包下才提供了SystemTray和TrayIcon类
    /** * A sample application of J2SE 6.0 TrayIocn * * @author Amooo * @version 1.00 06/07/11 */import java.awt.AWTException;import java.awt.Image;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.Toolkit;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.WindowConstants;public class TrayIconAdvanced extends JFrame {    private TrayIcon ti;    public static void main(String[] args) {        TrayIconAdvanced frame = new TrayIconAdvanced();        frame.setTitle("TrayIconAdvanced");        frame.setVisible(true);        frame.setSize(200, 65);        frame.setLocation(300, 200);    }    public TrayIconAdvanced() {        setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);        this.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                if (SystemTray.isSupported()) {                    setVisible(false);                    minimizeToTray();                } else {                    System.exit(0);                }            }        });        JPanel root = new JPanel();        JButton exitButton = new JButton("Exit");        exitButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                System.exit(0);            }        });        root.add(exitButton);        getContentPane().add(root);        pack();        initTi();    }    private void initTi() {        Image image = Toolkit.getDefaultToolkit().getImage(                this.getClass().getResource("TrayIcon.png"));        PopupMenu popupTi = new PopupMenu();        MenuItem showItem = new MenuItem("Show");        ActionListener showListener = new ActionListener() {            public void actionPerformed(ActionEvent e) {                setVisible(true);                SystemTray.getSystemTray().remove(ti);            }        };        showItem.addActionListener(showListener);        popupTi.add(showItem);        ti = new TrayIcon(image, "TrayIcon", popupTi);        ti.addActionListener(showListener);    }    public void minimizeToTray() {        SystemTray tray = SystemTray.getSystemTray();        try {            tray.add(ti);        } catch (AWTException e) {            System.err.println(e);        }    }}
      

  6.   

    这儿有一个详细的例子:
    http://blog.csdn.net/techyang/archive/2006/12/18/1448080.aspx
      

  7.   

    JDK1.5前用JNI
    JDK1.6提供SystemTray支持了