Приведу простой пример программы, цель которой запустить оконное приложение, свернутое в трей (не показывается на панели задач). По правому щелчку мыши на иконке, выводится меню.
- import java.awt.AWTException;
- import java.awt.BorderLayout;
- import java.awt.EventQueue;
- 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.WindowEvent;
- import java.awt.event.WindowListener;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.SwingUtilities;
- import javax.swing.border.EmptyBorder;
- public class start extends JFrame {
- private JPanel contentPane;
- private static JFrame frame;
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- try {
- frame = new start();
- frame.setVisible(false);
- frame.addWindowListener( new WindowListener(){
- @Override
- public void windowActivated(WindowEvent arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void windowClosed(WindowEvent arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void windowClosing(WindowEvent arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void windowDeactivated(WindowEvent arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void windowDeiconified(WindowEvent arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void windowIconified(WindowEvent arg0) {
- frame.setVisible(false);
- }
- @Override
- public void windowOpened(WindowEvent arg0) {
- // TODO Auto-generated method stub
- }
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
- public start() throws IOException, AWTException {
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setBounds(100, 100, 450, 300);
- contentPane = new JPanel();
- contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
- contentPane.setLayout(new BorderLayout(0, 0));
- setContentPane(contentPane);
- //***************************************************
- BufferedImage Icon= null;
- Icon = ImageIO.read(new File("1.gif"));
- final TrayIcon trayIcon = new TrayIcon(Icon, "Приложение в трее");
- SystemTray systemTray = SystemTray.getSystemTray();
- systemTray.add(trayIcon);
- //*****************************************************
- final PopupMenu popupMenu = new PopupMenu();
- MenuItem item = new MenuItem("Развернуть");
- item.addActionListener(new ActionListener(){
- @Override
- public void actionPerformed(ActionEvent e) {
- frame.setVisible(true);
- frame.setExtendedState(JFrame.NORMAL);
- }
- });
- popupMenu.add(item);
- trayIcon.addMouseListener(new MouseAdapter(){
- @Override
- public void mouseClicked (MouseEvent e){
- if ( SwingUtilities.isRightMouseButton( e )){
- trayIcon.setPopupMenu(popupMenu);
- }
- else if(SwingUtilities.isLeftMouseButton( e )){
- JOptionPane.showMessageDialog(null, "Нажата левая кнопка мыши", "Сообщение", JOptionPane.NO_OPTION);
- }
- }
- });
- }
- }
Со строки 38 по 82 строку мы переопределяем поведение нашего окна, нужно нам это для того чтобы при сворачивании сделать его невидимым, т.е. скрыть с панели задач.
В строках с 99 по 104 мы инициализируем системный трей и добавляем туда нашу иконку.
Со 110 строки мы создаем PopupMenu, который появляется при нажатии правой кнопки мыши, при нажатии левой кнопки появляется MessageDialog. И добавляем единственный пункт - "Развернуть", при нажатии на который у нас и появится наше окно, в стоке 116 мы программно устанавливаем положение окна как "NORMAL", если этого не сделать то окно появится свернутым на панели задач.