Icone da TrayIcon

2 respostas
B

Buenas galera…

Vamos ver se eu consigo uma ajudinha de vocês… Tenho minhas classes de controle de TrayIcon, que por sinal não aparece o icone, ele simplesmente fica invisível quando está na trayIcon, porém a aplicação fica ali e se der dois cliques nela ela aparece normalmente.
Segue classes abaixo.

package JinternalFrame;

    /**
    *
    * @author Flôres
    */

    import javax.swing.*;

    public class Principal extends JFrame {

        public Principal() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                System.out.println(ex);
            }
            this.setSize(800, 600);
            this.setExtendedState(MAXIMIZED_BOTH);
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        }
}
package JinternalFrame;

import Utilitario.MostraErro;
import java.awt.AWTException;
import java.io.File;
import java.io.IOException;
import javax.swing.ImageIcon;

/**
 *
 * @author Flôres
 */
public class TryIcon {

    private static Utilitario.ControleTrayIcon trayManager;

    public static void main(String args[]) {

        try {

            Principal janela = new Principal();
            janela.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
            janela.addWindowListener(new java.awt.event.WindowAdapter() {

                @Override
                public void windowClosing(java.awt.event.WindowEvent e) {
                    try {
                        trayManager.adicionarATray();
                    } catch (AWTException ex) {
                        System.out.println(ex);
                    }
                }
            });
            
            ImageIcon icon = new ImageIcon("Y:\\Filmes\\lib\\Filmes.png");
            System.out.println(icon.getIconWidth());
            trayManager = new Utilitario.ControleTrayIcon(janela, icon);
            trayManager.setBalaoSistemaDescricao("Duplo clique para maximizar a janela");
            trayManager.setBalaoSistemaTitulo("Titulo do balão");
            trayManager.setToolTipText("Duplo clique para maximizar a janela");
            trayManager.criarTrayIcon();
            trayManager.adicionarATray();

        } catch (AWTException ex) {
            new MostraErro("Erro ao habilitar o sistema para o tryIcon", ex.toString());
        }
    }
    
}
package Utilitario;

import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import javax.swing.ImageIcon;

public class ControleTrayIcon {

    private boolean suportaTrayIcon;
    private TrayIcon trayIcon;
    private Window parent;
    private String[] textoMenu = {"Restaurar", "Reiniciar", "Sair"};
    private ImageIcon icone;
    private String toolTipText;
    private String balaoSistemaTitulo;
    private String balaoSistemaDescricao;
    private MenuItem itemSair;
    
    public ControleTrayIcon (Window parent, String[] textoMenu, ImageIcon icone, String toolTipText, String balaoSistemaTitulo, String balaoSistemaDescricao, MenuItem[] itensExtras){
        this.parent = parent;
        this.textoMenu = textoMenu;
        this.icone = icone;
        this.toolTipText = toolTipText;
        this.balaoSistemaTitulo = balaoSistemaTitulo;
        this.balaoSistemaDescricao = balaoSistemaDescricao;
        this.setSuportaTrayIcon(true);
        this.criarTrayIcon(itensExtras);
    }

    public ControleTrayIcon(Window parent, String[] textoMenu, ImageIcon icone, String toolTipText, String balaoSistemaTitulo, String balaoSistemaDescricao){
        this.parent = parent;
        this.textoMenu = textoMenu;
        this.icone = icone;
        this.toolTipText = toolTipText;
        this.balaoSistemaTitulo = balaoSistemaTitulo;
        this.balaoSistemaDescricao = balaoSistemaDescricao;
        this.setSuportaTrayIcon(true);
        this.criarTrayIcon();
    }

    public ControleTrayIcon(Window parent, ImageIcon icone) {
        this.parent = parent;
        this.icone = icone;
        this.setSuportaTrayIcon(true);
     }

    public void criarTrayIcon() {
        this.criarTrayIcon(null);
    }

    public void criarTrayIcon(MenuItem[] itensExtras) {
        if (!SystemTray.isSupported()) {
            this.setSuportaTrayIcon(false);
            return;
        }

       final PopupMenu menu = new PopupMenu();
       MenuItem itemRestaurar = new MenuItem(textoMenu[0]);
 
       itemRestaurar.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               SystemTray.getSystemTray().remove(trayIcon);
               parent.setVisible(true);
           }
       });
       menu.add(itemRestaurar);

       MenuItem itemReiniciar = new MenuItem(textoMenu[1]);

       itemReiniciar.addActionListener(new ActionListener() {
            @Override
    	   public void actionPerformed(ActionEvent e) {

    		   String comando = Fc.f().pgetStringRunTimeDLL() + Fc.f().pgetLocalDoAplicativo() + "/SistemaUnificado.jar";

    		   try {
    			   Runtime.getRuntime().exec(comando);
    		   } catch (IOException e1) {
    			   System.out.println(e1);
    		   }
    		   System.exit(0);
    	   }
       });
       menu.add(itemReiniciar);

       if (itensExtras != null)
           for (MenuItem item : itensExtras)
               menu.add(item);
        
       this.itemSair = new MenuItem(this.textoMenu[2]);
       this.itemSair.addActionListener(new ActionListener() {
            @Override
           public void actionPerformed(ActionEvent e) {
        	   System.exit(0);
            }
       });

       menu.add(this.itemSair);

       this.trayIcon = new TrayIcon(this.icone.getImage(), this.toolTipText, menu);
       this.trayIcon.addMouseListener(new MouseAdapter() {
    	   @Override
           public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    SystemTray.getSystemTray().remove(trayIcon);
                    parent.setVisible(true);
                }
            }
        });
    }
    
    public void adicionarATray() throws AWTException {
        if (this.isSuportaTrayIcon()) {
            parent.dispose();
            SystemTray.getSystemTray().add(trayIcon);
            trayIcon.displayMessage(balaoSistemaTitulo, balaoSistemaDescricao, TrayIcon.MessageType.INFO);
        }
    }

    public void setBalaoSistemaDescricao(String balaoSistemaDescricao) {
        this.balaoSistemaDescricao = balaoSistemaDescricao;
    }

    public void setBalaoSistemaTitulo(String balaoSistemaTitulo) {
        this.balaoSistemaTitulo = balaoSistemaTitulo;
    }

    public void setIcone(ImageIcon icone) {
        this.icone = icone;
    }

    public void setParent(Window parent) {
        this.parent = parent;
    }

    public void setTextoMenu(String[] textoMenu) {
        this.textoMenu = textoMenu;
    }

    public void setToolTipText(String toolTipText) {
        this.toolTipText = toolTipText;
    }

    public void setTrayIcon(TrayIcon trayIcon) {
        this.trayIcon = trayIcon;
    }

    public boolean isSuportaTrayIcon() {
        return suportaTrayIcon;
    }

    public void setSuportaTrayIcon(boolean suportaTrayIcon) {
        this.suportaTrayIcon = suportaTrayIcon;
    }
}

2 Respostas

matheuslmota

Você tem que chamar o método setImage() do trayIcon. Esse método é que altera a imagem exibida no TrayIcon.

B

Já tentei por meio da chamada do método, porém isso resultou em fracasso também… :?:

Criado 16 de julho de 2012
Ultima resposta 17 de jul. de 2012
Respostas 2
Participantes 2