Galera, fiz uma pequena aplicação em Swing que quando minimizado cria um ícone no "Tray".
O ícone possui 2 opções: "Abrir" e "Fechar", essas opções funcionam normalmente, porém quando clico com o botão esquerdo 1 ou 2 vezes no ícone a aplicação não abre.
Li em algum lugar que esse listener do botão esquerdo do mouse deveria abrir a app por default.
Segue código da minha classe que controla o Tray.
package br.com.hb.consultaderamal.util;
import br.com.hb.consultaderamal.view.ConsultaDeRamalView;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class AreaNotificacao {
static TrayIcon trayIcon = null;
//Referencia à instancia ?crv? da classe ConsultaDeRamalView, para acesso da bandeja.
static ConsultaDeRamalView pai = ConsultaDeRamalView.crv;
public AreaNotificacao() {
super();
criaAreaNotificacao();
}
static void criaAreaNotificacao() {
//Verifica se é possível trabalhar com ?TrayIcon?
if (!SystemTray.isSupported()) {
System.out.println("Sem suporte a SystemTray!");
return;
}
final PopupMenu pop = new PopupMenu();
final SystemTray tray = SystemTray.getSystemTray();
// Criação do TrayIcon, informando uma imagem e um título
trayIcon = new TrayIcon(createImage("/br/com/hb/consultaderamal/images/PhoneIconTray.png", "TrayIcon"));
trayIcon.setToolTip("HB");
//Criação dos itens do Menu Popup
MenuItem item_1 = new MenuItem("Abrir");
MenuItem item_2 = new MenuItem("Fechar");
//Adicionando os itens ao Menu Popup
pop.add(item_1);
pop.addSeparator();
pop.add(item_2);
trayIcon.setPopupMenu(pop);
// Adicionado ícone na área de notificação
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.out.println("Erro ao adicionar ícone na área de notificação.");
return;
}
//Ação do botão ?item_1″
item_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
pai.setVisible(true); // Deixa a janela visível novamente
pai.setExtendedState(JFrame.NORMAL); // Deixa a janela sobre as outras, caso ela apareça minimizada
try {
tray.remove(trayIcon); // Remove (ou esconde) o ícone da Área de Notificação
trayIcon = null;
pai.an = null; //Limpando a referência ao Systemtray
} catch (Throwable e1) {
e1.printStackTrace();
}
}
});
//Ação do botão ?item_2″
item_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
protected static Image createImage(String path, String description) {
URL imageURL = AreaNotificacao.class.getResource(path);
if (imageURL == null) {
System.err.println("Caminho não encontrado: " + path);
return null;
} else {
return (new ImageIcon(imageURL, description)).getImage();
}
}
}