Tray Icon Windows

1

I'm creating an application to back up, and I plan on putting the full-time wheel application into the machine.

I think of putting the application in the Try Icon of Windows but after some tests I managed to make it work only that by minimizing the application I can not only keep it minimized in the tray, and it stays in the taskbar.

The post I followed to create my tray was that of my next link:

Post Tray Icon

    
asked by anonymous 23.09.2015 / 14:34

1 answer

3

I found two ways to do what you need.

One of them is to set the type of your JFrame to JFrame.Type.UTILITY . Note: You can only change the type of JFrame while it is not yet visible. Obs2: I tested with JDK 1.7 , I do not know the .setType() method for lower versions.

What I did was

JFrame frame = new JFrame();
frame.setSize(100, 100);
frame.setLocation(100, 150);
frame.setType(JFrame.Type.UTILITY); //Essa é a parte importante
frame.setVisible(true); //Note que eu só deixei o frame visível após usar o setType()

To apply this to your case, you must use the setType() event whenever you minimize or maximize the window, to take it out and place it in TaskBar of Windows, respectively. For this you can use the windowStateChanged() method, likely that you are already using it to place the icon in Tray Icon .

Method documentation setType()
Documentation for Enum Window.Type

The other solution I found in SOen , it is quite easy to understand what the code does. In addition to having what you need, you still have a popup menu on the Tray icon. Below is the original code.

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();
    }
}
    
23.09.2015 / 18:56