【问题标题】:How do I put a Java app in the system tray?如何将 Java 应用程序放入系统托盘?
【发布时间】:2010-10-19 23:23:51
【问题描述】:

我有一个小控制面板,只是我制作的一个小应用程序。我想通过系统最小化/向上/向下放置控制面板,以及电池寿命、日期、网络等。

谁能给我线索、教程链接或阅读内容?

【问题讨论】:

    标签: java system-tray minimize


    【解决方案1】:

    这是您可以用来访问和自定义系统托盘的代码:

    final TrayIcon trayIcon;
    
    if (SystemTray.isSupported()) {
    
    SystemTray tray = SystemTray.getSystemTray();
    Image image = Toolkit.getDefaultToolkit().getImage("tray.gif");
    
    MouseListener mouseListener = new MouseListener() {
    
        public void mouseClicked(MouseEvent e) {
            System.out.println("Tray Icon - Mouse clicked!");                 
        }
    
        public void mouseEntered(MouseEvent e) {
            System.out.println("Tray Icon - Mouse entered!");                 
        }
    
        public void mouseExited(MouseEvent e) {
            System.out.println("Tray Icon - Mouse exited!");                 
        }
    
        public void mousePressed(MouseEvent e) {
            System.out.println("Tray Icon - Mouse pressed!");                 
        }
    
        public void mouseReleased(MouseEvent e) {
            System.out.println("Tray Icon - Mouse released!");                 
        }
    };
    
    ActionListener exitListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Exiting...");
            System.exit(0);
        }
    };
    
    PopupMenu popup = new PopupMenu();
    MenuItem defaultItem = new MenuItem("Exit");
    defaultItem.addActionListener(exitListener);
    popup.add(defaultItem);
    
    trayIcon = new TrayIcon(image, "Tray Demo", popup);
    
    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            trayIcon.displayMessage("Action Event", 
                "An Action Event Has Been Performed!",
                TrayIcon.MessageType.INFO);
        }
    };
    
    trayIcon.setImageAutoSize(true);
    trayIcon.addActionListener(actionListener);
    trayIcon.addMouseListener(mouseListener);
    
    try {
        tray.add(trayIcon);
    } catch (AWTException e) {
        System.err.println("TrayIcon could not be added.");
    }
    
    } else {
    
    //  System Tray is not supported
    
    }
    

    【讨论】:

      【解决方案2】:

      很简单

      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.JOptionPane;
      
      public class SystemTrayDemo{
      
      //start of main method
      public static void main(String []args){
          //checking for support
          if(!SystemTray.isSupported()){
              System.out.println("System tray is not supported !!! ");
              return ;
          }
          //get the systemTray of the system
          SystemTray systemTray = SystemTray.getSystemTray();
      
          //get default toolkit
          //Toolkit toolkit = Toolkit.getDefaultToolkit();
          //get image 
          //Toolkit.getDefaultToolkit().getImage("src/resources/busylogo.jpg");
          Image image = Toolkit.getDefaultToolkit().getImage("src/images/1.gif");
      
          //popupmenu
          PopupMenu trayPopupMenu = new PopupMenu();
      
          //1t menuitem for popupmenu
          MenuItem action = new MenuItem("Action");
          action.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  JOptionPane.showMessageDialog(null, "Action Clicked");          
              }
          });     
          trayPopupMenu.add(action);
      
          //2nd menuitem of popupmenu
          MenuItem close = new MenuItem("Close");
          close.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  System.exit(0);             
              }
          });
          trayPopupMenu.add(close);
      
          //setting tray icon
          TrayIcon trayIcon = new TrayIcon(image, "SystemTray Demo", trayPopupMenu);
          //adjust to default size as per system recommendation 
          trayIcon.setImageAutoSize(true);
      
          try{
              systemTray.add(trayIcon);
          }catch(AWTException awtException){
              awtException.printStackTrace();
          }
          System.out.println("end of main");
      
      }//end of main
      
      }//end of class
      

      为图像设置适当的路径,然后运行程序。 t.y. :)

      【讨论】:

        【解决方案3】:

        从 Java 6 开始,SystemTrayTrayIcon 类支持此功能。 SystemTray 在其 Javadocs 中有一个相当广泛的示例:

        TrayIcon trayIcon = null;
        if (SystemTray.isSupported()) {
            // get the SystemTray instance
            SystemTray tray = SystemTray.getSystemTray();
            // load an image
            Image image = Toolkit.getDefaultToolkit().getImage("your_image/path_here.gif");
            // create a action listener to listen for default action executed on the tray icon
            ActionListener listener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    // execute default action of the application
                    // ...
                }
            };
            // create a popup menu
            PopupMenu popup = new PopupMenu();
            // create menu item for the default action
            MenuItem defaultItem = new MenuItem(...);
            defaultItem.addActionListener(listener);
            popup.add(defaultItem);
            /// ... add other items
            // construct a TrayIcon
            trayIcon = new TrayIcon(image, "Tray Demo", popup);
            // set the TrayIcon properties
            trayIcon.addActionListener(listener);
            // ...
            // add the tray image
            try {
                tray.add(trayIcon);
            } catch (AWTException e) {
                System.err.println(e);
            }
            // ...
        } else {
            // disable tray option in your application or
            // perform other actions
            ...
        }
        // ...
        // some time later
        // the application state has changed - update the image
        if (trayIcon != null) {
            trayIcon.setImage(updatedImage);
        }
        // ...
        

        您也可以查看this articlethis tech tip

        【讨论】:

        • 正是我需要的! +1
        • 它很棒 :) 如果你想为 defaultItem 设置文本,使用 setLabel("Something")
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多