Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to hide a JFrame in system tray of taskbar

I have created a JFrame and want to hide it in the taskbar in windows, but, it should not be visible in the bottom right corner, but hidden in the tray menu items.

Can anybody tell me how to do this?
Do I need to make some changes in system settings of windows?

For example, you might have seen some download managers, Team Viewer, 4shared desktop, etc. are hidden in taskbar's tray menu items.

like image 793
Mohammad Faisal Avatar asked Sep 18 '11 12:09

Mohammad Faisal


People also ask

How do I hide a JFrame?

Just add this: JFrame. setDefaultCloseOperation(DISPOSE_ON_CLOSE) . Note: The default option for JFrame is HIDE_ON_CLOSE . This will cause the program to slow down much like setVisible(false); .

How do you hide a frame window in Java?

For hiding a JFrame, setVisible(false) is correct (and again besides the deprecated hide() again the only way). Depending on if you plan to eventually reuse the frame (show it again in future) you may additionally want to additionally call dispose() if you will not show the frame again.

How do I close a JFrame without exiting?

Use anything for setDefaultCloseOperation excepting EXIT_ON_CLOSE . Then, for the cancel button, just dispose() the window. If the application has another running thread, it won't exit. You can also hide a window by calling setVisible(false) .

How do you make a JFrame visible?

When you create a JFrame object, by default, it is not visible. You need to call its setVisible(boolean visible) method to make it visible. If you pass true to this method, the JFrame is made visible, and if you pass false, it is made invisible.


1 Answers

import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.UIManager;  /**  *  * @author Mohammad Faisal  * ermohammadfaisal.blogspot.com  * facebook.com/m.faisal6621  *  */  public class HideToSystemTray extends JFrame{     TrayIcon trayIcon;     SystemTray tray;     HideToSystemTray(){         super("SystemTray test");         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("/media/faisal/DukeImg/Duke256.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) {                     setVisible(true);                     setExtendedState(JFrame.NORMAL);                 }             });             popup.add(defaultItem);             trayIcon=new TrayIcon(image, "SystemTray Demo", popup);             trayIcon.setImageAutoSize(true);         }else{             System.out.println("system tray not supported");         }         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("Duke256.png"));          setVisible(true);         setSize(300, 200);         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     }     public static void main(String[] args){         new HideToSystemTray();     } } 

This is the working program!

like image 139
Mohammad Faisal Avatar answered Sep 25 '22 17:09

Mohammad Faisal