jdk 1.6 systemtray 系统托盘

解决方案 »

  1.   

    http://www.vogella.de/articles/RichClientPlatform/article.html
    第9节就是讲TRAY的
      

  2.   

    import java.awt.AWTException;
    import java.awt.Desktop;
    import java.awt.Image;
    import java.awt.MenuItem;
    import java.awt.PopupMenu;
    import java.awt.SystemTray;
    import java.awt.TrayIcon;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;public class DesktopTray {
    private static Desktop desktop;
    private static SystemTray tray;
    private static PopupMenu menu; public static void main(String[] args) {
    if (Desktop.isDesktopSupported()) {
    desktop = Desktop.getDesktop();
    }
    if (SystemTray.isSupported()) {
    tray = SystemTray.getSystemTray();
    Image image = Toolkit.getDefaultToolkit().getImage("Tray.png");
    creatPopupMenu();
    TrayIcon ti = new TrayIcon(image, "Tray", menu);
    try {
    tray.add(ti);
    } catch (AWTException e) { e.printStackTrace();
    }
    }
    } public static void creatPopupMenu() {
    menu = new PopupMenu();
    MenuItem openBrowser = new MenuItem("Open Browser");
    openBrowser.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    openBrowser("http://www.sina.com.cn"); } });
    MenuItem sendMail = new MenuItem("Send Mail");
    sendMail.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    sendMail("mailto:[email protected]"); } });
    MenuItem edit = new MenuItem("Edit");
    edit.addActionListener(new ActionListener(){ @Override
    public void actionPerformed(ActionEvent e) {
    edit();

    }

    });
    MenuItem exit = new MenuItem("Exit");
            exit.addActionListener(new ActionListener(){ @Override
    public void actionPerformed(ActionEvent e) {
    System.exit(0);

    }
            
            });
            menu.add(openBrowser);
            menu.add(sendMail);
            menu.add(edit);
            menu.add(exit);
    } public static void openBrowser(String url) {
    if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
    try {
    desktop.browse(new URI(url));
    } catch (IOException e) { e.printStackTrace();
    } catch (URISyntaxException e) { e.printStackTrace();
    }
    }
    } public static void sendMail(String mail) {
    if (desktop != null && desktop.isSupported(Desktop.Action.MAIL)) {
    try {
    desktop.mail(new URI(mail));
    } catch (IOException e) { e.printStackTrace();
    } catch (URISyntaxException e) { e.printStackTrace();
    }
    }
    } public static void edit() {
    if (desktop != null && desktop.isSupported(Desktop.Action.EDIT)) {
    File file = new File("ltz.doc");
    if (!file.exists()) {
    try {
    file.createNewFile(); } catch (IOException e) { e.printStackTrace();
    } }
    try {
    desktop.edit(file);
    } catch (IOException e) {

    e.printStackTrace();
    }
    }
    }
    }
    Tray.png 自己画
      

  3.   

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.graphics.Image;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Menu;
    import org.eclipse.swt.widgets.MenuItem;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Tray;
    import org.eclipse.swt.widgets.TrayItem;
    public class Test {
    public static void main(String[] args) {
            Display display = new Display();
            Shell shell = new Shell(display);
            Image image = new Image(display, 16, 16);
            final Tray tray = display.getSystemTray();
            if (tray == null) {
                System.out.println("The system tray is not available");
            } else {
                final TrayItem item = new TrayItem(tray, SWT.NONE);
                item.setToolTipText("SWT TrayItem");
                item.addListener(SWT.Show, new Listener() {
                    public void handleEvent(Event event) {
                        System.out.println("show");
                    }
                });
                item.addListener(SWT.Hide, new Listener() {
                    public void handleEvent(Event event) {
                        System.out.println("hide");
                    }
                });
                item.addListener(SWT.Selection, new Listener() {
                    public void handleEvent(Event event) {
                        System.out.println("selection");
                    }
                });
                item.addListener(SWT.DefaultSelection, new Listener() {
                    public void handleEvent(Event event) {
                        System.out.println("default selection");
                    }
                });
                final Menu menu = new Menu(shell, SWT.POP_UP);
                for (int i = 0; i < 8; i++) {
                    MenuItem mi = new MenuItem(menu, SWT.PUSH);
                    mi.setText("Item" + i);
                    mi.addListener(SWT.Selection, new Listener() {
                        public void handleEvent(Event event) {
                            System.out.println("selection " + event.widget);
                        }
                    });
                    if (i == 0)
                        menu.setDefaultItem(mi);
                }
                item.addListener(SWT.MenuDetect, new Listener() {
                    public void handleEvent(Event event) {
                        menu.setVisible(true);
                    }
                });
                item.setImage(image);
            }
            shell.setBounds(50, 50, 300, 200);
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            image.dispose();
            display.dispose();
        }
    }
      

  4.   


    你说的例子用了 
    org.eclipse.jface.action.MenuManager;
    org.eclipse.swt.SWT;这些包。
      

  5.   

    还想问一下 这个 org.eclipse.swt.graphics.Image 类 如何设置不同图案?
      

  6.   

    你可以通过下面的构造函数,来构造ImageImage (Device device, String filename) 
      

  7.   

    可以用 Image image = new Image(display, "c:\\swt icon\\ra95.png");        另外 swt窗口居中显示 用        shell.setSize(300, 200);
            
            int width = shell.getMonitor().getClientArea().width;   
            int height = shell.getMonitor().getClientArea().height;   
            int x = shell.getSize().x;   
            int y = shell.getSize().y;   
            if(x>width)   
             shell.getSize().x = width;     
            if(y>height)   
             shell.getSize().y = height;   
            shell.setLocation((width-x)/2, (height-y)/2);  
      

  8.   

    2楼的代码 编译public void actionPerformed(ActionEvent e) 时报错。