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);
System Tray support was added in JavaSE v 6.
you can see example here http://download.oracle.com/javase/7/docs/api/java/awt/SystemTray.html
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();}}