Tray Icon Windows

Asked

Viewed 633 times

1

I am creating an application to perform backup, and think about putting the application to run full time in which the machine is running.

I plan to put the application in Try Icon Windows but after some tests I was able to make it work only by minimizing the application I can not only keep it minimized in Tray, and it is in the task bar.

The post I followed to create my Tray was the following link:

Post Tray Icon

  • 1

    só que ao minimizar a aplicação não consigo somente mantê-la no minimizada no tray What do you mean by that? That the icon is still on the taskbar?

  • @Yes, that’s the question.

  • Are you using swing or awt?

  • @Jéfersonbueno I’m using swing

1 answer

3


I found two ways to do what you need.

One of them is settar your kind of JFrame for JFrame.Type.UTILITY.
Obs: You can only change the kind of JFrame while he is not yet visible.
Obs2: I tested with the JDK 1.7, I don’t know if there’s a method .setType() 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 will need to use the event setType() whenever you minimize or maximize the window, to take it out and put it on TaskBar Windows, respectively. For this you can use the method windowStateChanged(), likely that you are already using it to place the icon on Tray Icon.

Method documentation setType()
Documentation of Enum Window.Type

The other solution I found in Soen, it is very easy to understand what the code does. Besides having what you need, it still has a menu popup on the icon that stands Tray. Follow below 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();
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.