Java/JDK 6/TrayIcon

Материал из Java эксперт
Перейти к: навигация, поиск

Add mouse listener to TrayIcon

   
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
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.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
public class SystemTrayDemo2 {
  public static void main(String[] args) {
    if (!SystemTray.isSupported()) {
      return;
    }
    SystemTray tray = SystemTray.getSystemTray();
    Dimension size = tray.getTrayIconSize();
    BufferedImage bi = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.getGraphics();
    g.setColor(Color.blue);
    g.fillRect(0, 0, size.width, size.height);
    g.setColor(Color.yellow);
    int ovalSize = (size.width < size.height) ? size.width : size.height;
    ovalSize /= 2;
    g.fillOval(size.width / 4, size.height / 4, ovalSize, ovalSize);
    try {
      PopupMenu popup = new PopupMenu();
      MenuItem miExit = new MenuItem("Exit");
      ActionListener al;
      al = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          System.out.println("Goodbye");
          System.exit(0);
        }
      };
      miExit.addActionListener(al);
      popup.add(miExit);
      TrayIcon ti = new TrayIcon(bi, "System Tray Demo #2", popup);
      al = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          System.out.println(e.getActionCommand());
        }
      };
      ti.setActionCommand("My Icon");
      ti.addActionListener(al);
      MouseListener ml;
      ml = 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");
        }
      };
      ti.addMouseListener(ml);
      MouseMotionListener mml;
      mml = new MouseMotionListener() {
        public void mouseDragged(MouseEvent e) {
          System.out.println("Tray icon: Mouse dragged");
        }
        public void mouseMoved(MouseEvent e) {
          System.out.println("Tray icon: Mouse moved");
        }
      };
      ti.addMouseMotionListener(mml);
      tray.add(ti);
    } catch (AWTException e) {
      System.out.println(e.getMessage());
      return;
    }
  }
}





Add Mouse motion listener to TrayIcon

   
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
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.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
public class SystemTrayDemo2 {
  public static void main(String[] args) {
    if (!SystemTray.isSupported()) {
      return;
    }
    SystemTray tray = SystemTray.getSystemTray();
    Dimension size = tray.getTrayIconSize();
    BufferedImage bi = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.getGraphics();
    g.setColor(Color.blue);
    g.fillRect(0, 0, size.width, size.height);
    g.setColor(Color.yellow);
    int ovalSize = (size.width < size.height) ? size.width : size.height;
    ovalSize /= 2;
    g.fillOval(size.width / 4, size.height / 4, ovalSize, ovalSize);
    try {
      PopupMenu popup = new PopupMenu();
      MenuItem miExit = new MenuItem("Exit");
      ActionListener al;
      al = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          System.out.println("Goodbye");
          System.exit(0);
        }
      };
      miExit.addActionListener(al);
      popup.add(miExit);
      TrayIcon ti = new TrayIcon(bi, "System Tray Demo #2", popup);
      al = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          System.out.println(e.getActionCommand());
        }
      };
      ti.setActionCommand("My Icon");
      ti.addActionListener(al);
      MouseListener ml;
      ml = 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");
        }
      };
      ti.addMouseListener(ml);
      MouseMotionListener mml;
      mml = new MouseMotionListener() {
        public void mouseDragged(MouseEvent e) {
          System.out.println("Tray icon: Mouse dragged");
        }
        public void mouseMoved(MouseEvent e) {
          System.out.println("Tray icon: Mouse moved");
        }
      };
      ti.addMouseMotionListener(mml);
      tray.add(ti);
    } catch (AWTException e) {
      System.out.println(e.getMessage());
      return;
    }
  }
}





Add PropertyChangeListener to TrayIcon

   

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class SystemTrayDemo1 {
  public static void main(String[] args) throws Exception {
    if (!SystemTray.isSupported()) {
      return;
    }
    SystemTray tray = SystemTray.getSystemTray();
    PropertyChangeListener pcl;
    pcl = new PropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent pce) {
        System.out.println("Property changed = " + pce.getPropertyName());
        TrayIcon[] tia = (TrayIcon[]) pce.getOldValue();
        if (tia != null) {
          System.out.println("Old tray icon array contents: ");
          for (int i = 0; i < tia.length; i++)
            System.out.println(tia[i]);
          System.out.println();
        }
        tia = (TrayIcon[]) pce.getNewValue();
        if (tia != null) {
          System.out.println("New tray icon array contents: ");
          for (int i = 0; i < tia.length; i++)
            System.out.println(tia[i]);
          System.out.println();
        }
      }
    };
    tray.addPropertyChangeListener("trayIcons", pcl);
    Dimension size = tray.getTrayIconSize();
    BufferedImage bi = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.getGraphics();
    g.setColor(Color.blue);
    g.fillRect(0, 0, size.width, size.height);
    g.setColor(Color.yellow);
    int ovalSize = (size.width < size.height) ? size.width : size.height;
    ovalSize /= 2;
    g.fillOval(size.width / 4, size.height / 4, ovalSize, ovalSize);
    TrayIcon icon = null;
    tray.add(icon = new TrayIcon(bi));
    Thread.sleep(3000);
    tray.remove(icon);
    Thread.sleep(3000);
    System.exit(0);
  }
}





Create Tray Icon

   
import java.awt.AWTException;
import java.awt.Image;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test {
  static Image image = Toolkit.getDefaultToolkit().getImage("images/tray.gif");
  static TrayIcon trayIcon = new TrayIcon(image, "Tester2");
  public static void main(String[] a) throws Exception {
    if (SystemTray.isSupported()) {
      SystemTray tray = SystemTray.getSystemTray();
      trayIcon.setImageAutoSize(true);
      trayIcon.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          System.out.println("In here");
          trayIcon.displayMessage("Tester!", "Some action performed", TrayIcon.MessageType.INFO);
        }
      });
      try {
        tray.add(trayIcon);
      } catch (AWTException e) {
        System.err.println("TrayIcon could not be added.");
      }
    }
  }
}





Demonstrating a System Tray That Responds to Selection

   
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.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class ActiveTray {
  public static void main(String args[]) throws Exception{
    if (SystemTray.isSupported() == false) {
      System.err.println("No system tray available");
      return;
    }
    final SystemTray tray = SystemTray.getSystemTray();
    PropertyChangeListener propListener = new PropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent evt) {
        TrayIcon oldTray[] = (TrayIcon[]) evt.getOldValue();
        TrayIcon newTray[] = (TrayIcon[]) evt.getNewValue();
        System.out.println(oldTray.length + " / " + newTray.length);
      }
    };
    tray.addPropertyChangeListener("trayIcons", propListener);
    Image image = Toolkit.getDefaultToolkit().getImage("jpgIcon.jpg");
    PopupMenu popup = new PopupMenu();
    MenuItem item = new MenuItem("Hello, World");
    final TrayIcon trayIcon = new TrayIcon(image, "Tip Text", popup);
    ActionListener menuActionListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        trayIcon.displayMessage("Good-bye", "Cruel World", TrayIcon.MessageType.WARNING);
      }
    };
    item.addActionListener(menuActionListener);
    popup.add(item);
    ActionListener actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        tray.remove(trayIcon);
      }
    };
    trayIcon.addActionListener(actionListener);
    tray.add(trayIcon);
  }
}





Have a systray icon (Windows)

  
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 javax.swing.JOptionPane;
public class Main {
  static TrayIcon trayIcon = null;
  public static void main(String[] args) throws Exception {
    SystemTray sysTray = SystemTray.getSystemTray();
    Image image = Toolkit.getDefaultToolkit().getImage("/a.jpg");
    ActionListener exitListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.out.println("Bye from the tray");
        System.exit(0);
      }
    };
    ActionListener executeListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "!", "User action",
            JOptionPane.INFORMATION_MESSAGE);
        trayIcon.displayMessage("Done", "!", TrayIcon.MessageType.INFO);
      }
    };
    PopupMenu menu = new PopupMenu();
    MenuItem execItem = new MenuItem("Action...");
    execItem.addActionListener(executeListener);
    menu.add(execItem);
    MenuItem exitItem = new MenuItem("Exit");
    exitItem.addActionListener(exitListener);
    menu.add(exitItem);
    trayIcon = new TrayIcon(image, "Java System Tray Demo", menu);
    trayIcon.setImageAutoSize(true);
    sysTray.add(trayIcon);
    trayIcon.displayMessage("Ready", "started", TrayIcon.MessageType.INFO);
  }
}





Remove Icon from TrayIcon

   
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class SystemTrayDemo1 {
  public static void main(String[] args) throws Exception {
    if (!SystemTray.isSupported()) {
      return;
    }
    SystemTray tray = SystemTray.getSystemTray();
    PropertyChangeListener pcl;
    pcl = new PropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent pce) {
        System.out.println("Property changed = " + pce.getPropertyName());
        TrayIcon[] tia = (TrayIcon[]) pce.getOldValue();
        if (tia != null) {
          System.out.println("Old tray icon array contents: ");
          for (int i = 0; i < tia.length; i++)
            System.out.println(tia[i]);
          System.out.println();
        }
        tia = (TrayIcon[]) pce.getNewValue();
        if (tia != null) {
          System.out.println("New tray icon array contents: ");
          for (int i = 0; i < tia.length; i++)
            System.out.println(tia[i]);
          System.out.println();
        }
      }
    };
    tray.addPropertyChangeListener("trayIcons", pcl);
    Dimension size = tray.getTrayIconSize();
    BufferedImage bi = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.getGraphics();
    g.setColor(Color.blue);
    g.fillRect(0, 0, size.width, size.height);
    g.setColor(Color.yellow);
    int ovalSize = (size.width < size.height) ? size.width : size.height;
    ovalSize /= 2;
    g.fillOval(size.width / 4, size.height / 4, ovalSize, ovalSize);
    TrayIcon icon = null;
    tray.add(icon = new TrayIcon(bi));
    Thread.sleep(3000);
    tray.remove(icon);
    Thread.sleep(3000);
    System.exit(0);
  }
}





System tray icon

  
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.Panel;
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.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.JOptionPane;
import javax.swing.plaf.metal.MetalIconFactory;
public class SysTray {
  public static void main(String[] args) throws Exception {
    new SysTray().installSystemTray();
  }
  public void installSystemTray() throws Exception {
    PopupMenu menu = new PopupMenu();
    MenuItem exit = new MenuItem("Exit");
    exit.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    });
    menu.add(exit);
    
    TrayIcon icon = new TrayIcon(getImage(), "Java application as a tray icon", menu);
    icon.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "Hi!");
      }
    });
    SystemTray.getSystemTray().add(icon);
    Thread.sleep(3000);
    icon.displayMessage("Attention", "Please click here", TrayIcon.MessageType.WARNING);
  }
  private Image getImage() throws HeadlessException {
    Icon defaultIcon = MetalIconFactory.getTreeHardDriveIcon();
    Image img = new BufferedImage(defaultIcon.getIconWidth(), defaultIcon.getIconHeight(),
        BufferedImage.TYPE_4BYTE_ABGR);
    defaultIcon.paintIcon(new Panel(), img.getGraphics(), 0, 0);
    return img;
  }
}





Using system tray

   
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 javax.swing.JOptionPane;
public class SystemTrayDemo {
  public static void main(String[] args)throws Exception {
    if (!SystemTray.isSupported()) {
      System.out.println("SystemTray is not supported");
      return;
    }
    SystemTray tray = SystemTray.getSystemTray();
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage("trayIcon.jpg");
    PopupMenu menu = new PopupMenu();
    MenuItem messageItem = new MenuItem("Show Message");
    messageItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "www.jexp.ru");
      }
    });
    menu.add(messageItem);
    MenuItem closeItem = new MenuItem("Close");
    closeItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    });
    menu.add(closeItem);
    TrayIcon icon = new TrayIcon(image, "SystemTray Demo", menu);
    icon.setImageAutoSize(true);
    tray.add(icon);
  }
}