Hiding my program in the System Tray in Windows Hiding my program in the System Tray in Windows windows windows

Hiding my program in the System Tray in Windows


I know how to have my program's icon in the notification area, what I'd like is to hide it in the area where it is normally displayed when you minimize a window.

Then don't use the system tray.

The thing is, I'd like my program to stay open in the Status Area if the "X" is pressed on the window,

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);


import java.awt.*;import java.awt.event.*;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.UIManager;public class HideToSystemTray extends JFrame {    TrayIcon trayIcon;    SystemTray tray;    JButton button;    HideToSystemTray() {        super("SystemTray test");        button = new JButton("Press");        button.setBounds(10, 10, 40, 40);        setUndecorated(true);        getContentPane().add(button);        System.out.println("creating instance");        try {            System.out.println("setting look and feel");            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        } catch (Exception e) {            System.out.println("Unable to set LookAndFeel");        }        if (SystemTray.isSupported()) {            System.out.println("system tray supported");            tray = SystemTray.getSystemTray();            Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png");            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);            defaultItem = new MenuItem("Open");            defaultItem.addActionListener(new ActionListener() {                public void actionPerformed(ActionEvent e) {                    tray.remove(trayIcon);                    setVisible(true);                    System.out.println("Tray icon removed");                }            });            popup.add(defaultItem);            trayIcon = new TrayIcon(image, "SystemTray Demo", popup);            trayIcon.setImageAutoSize(true);        } else {            System.out.println("system tray not supported");        }        button.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                //Execute when button is pressed                System.out.println("You clicked the button");                try {                    tray.add(trayIcon);                    setVisible(false);                    System.out.println("added to SystemTray");                } catch (AWTException ex) {                    System.out.println("unable to add to tray");                }            }        });    /*  addWindowStateListener(new WindowStateListener() {     public void windowStateChanged(WindowEvent e) {         if(e.getNewState()==ICONIFIED){             try {                 tray.add(trayIcon);                 setVisible(false);                 System.out.println("added to SystemTray");             } catch (AWTException ex) {                 System.out.println("unable to add to tray");             }         }         if(e.getNewState()==7){             try{                 tray.add(trayIcon);                 setVisible(false);                 System.out.println("added to SystemTray");             }catch(AWTException ex){                 System.out.println("unable to add to system tray");             }         }         if(e.getNewState()==MAXIMIZED_BOTH){             tray.remove(trayIcon);             setVisible(true);             System.out.println("Tray icon removed");         }         if(e.getNewState()==NORMAL){             tray.remove(trayIcon);             setVisible(true);             System.out.println("Tray icon removed");         }     }     }); */    setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png"));    setVisible(true);    setSize(300, 200);    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {    new HideToSystemTray();}}