Neste post vou falar um pouco sobre o System Tray do sistema operacional e como fazer pra que seu aplicativo java vá parar lá.
O System Tray é um espaço reservado em algumas plataformas (windows por exemplo) destinado a aplicativos cujo maior objetivo é ficar monitorando alguma coisa. Exemplos de aplicativos comuns de serem encontrados nessa área são os antivirus, o software que monitora a atualização do sistema operacional, alguns aplicativos de comunicação instantânea como skype e o msn, etc. Com a elevada capacidade de processamento das máquinas e a quantidade cada vez maior de aplicativos instalados, esse área costuma ficar bastante disputada.
No java o nome dado a classe que cuida dessa área também é chamada de SystemTray e o objeto que colocamos nessa área é chamado de TrayIcon. Por se tratar de uma área de controle do sistema operacional a classe SystemTray não permite a construção de um objeto, isso fica a cargo da máquina virtual. A classe em si nos fornece uma referência a está área, através do método "getSystemTray()". Vale lembrar que nem todo sistema operacional, neste caso o termo mais correto é sistema de janelas já que o sistema operacional é uma camada mais baixa, possui o disponibiliza uma área System Tray. Neste caso é acoselhável descobrir antes se existe suporte para só depois solicitar uma refêrencia a área. Para descobrir se existe suporte, basta utilizar o método estático "isSupported()" da classe SystemTray.
A classe TrayIcon nos fornece todos os recursos necessários para disponilizarmos um ícone na System Tray, configuramos mensagens quando o mouse pousar sobre o ícone, adicionarmos um menu, enviarmos mensagem pro usuário (muito comum nos aplicativos de atualização, quando uma atualização está disponível aguardando a confirmação do usuário), entre outros métodos.
Agora que temos uma refência a área System Tray e um objeto do tipo TrayIcon, basta adiciona-lo na área ... fácil, não?
O exemplo a seguir é bastante simples porém demonstra grande parte dos métodos dessas duas classes. O objetivo deste pequeno aplicativo é colocar um icone na system tray e ficar alternado a cor de exibição, como em um semáforo. Ao passar o mouse sobre o icone ele irá mostrar a mensagem (toolTip) "Java Milk Blog - System Tray", o duplo clique com o botão esquerdo irá mostrar uma mensagem de aviso e um clique com o botão esquerdo irá exibir o menu.
Segue o código da aplicação, como sempre, bastante detalhado:
package javamilk; import java.awt.AWTException; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; /** * O objetivo desta classe é desmonstra de modo simples o uso da System Tray * do sistema operacional, disponibilizando um icone nesta área e enviando * mensagens pro usuário em um período de tempo predeterminado. * @author giuliano */ public class JavaMilk { /** * @param args the command line arguments */ public static void main(String[] args) { //Antes de mais nada, vamos checar se a plataforma em que está //sendo executado este aplicativo possui algum tipo de System Tray if(!SystemTray.isSupported()){ //se não é suportado, encerramos por aqui System.err.println("System Tray não suportado nesta plataforma."); } //caso contrário, podemos seguir adiante, pegando uma referência //a esta área SystemTray systemTray = SystemTray.getSystemTray(); //Vamos declarar uma imagem (icone) que usaremos para representarmos //nosso aplicativo na SystemTray final Image icon1 = Toolkit.getDefaultToolkit().getImage("verde.png"); final Image icon2 = Toolkit.getDefaultToolkit().getImage("amarelo.png"); final Image icon3 = Toolkit.getDefaultToolkit().getImage("vermelho.png"); //Vamos atribuir essa imagem ao icone do system tray //Vamos criar um menu popup para nosso aplicativo PopupMenu menu = new PopupMenu(); MenuItem itemSair = new MenuItem("Sair"); itemSair.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); menu.add(itemSair); //Este será o objeto que colocaremos na System Tray do SO final TrayIcon trayIcon; //Adicionamos o icone e o menu no objeto que colocaremos na system tray trayIcon = new TrayIcon(icon1, "Java Milk Blog - System tray", menu); //Pra evitar que a imagem seja cortada, façamos o auto ajuste trayIcon.setImageAutoSize(true); //Vamos adicionar eventos a esse objeto trayIcon.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { trayIcon.displayMessage("Quer saber como fechar este aplicativo?", "Clique com o botão direito", TrayIcon.MessageType.INFO); } }); try { //Agora que temos o objeto pronto podemos enfim adiciona-lo na tray systemTray.add(trayIcon); } catch (AWTException ex) { System.err.println("Não foi possivel adicionar objeto na system tray"); } //Vamos adicionar um timer pra ficar mudando o icone do objeto Timer timer = new Timer(3000,new ActionListener(){ public void actionPerformed(ActionEvent e) { if(trayIcon.getImage()==icon1){ trayIcon.setImage(icon2); } else if(trayIcon.getImage()==icon2){ trayIcon.setImage(icon3); } else{ trayIcon.setImage(icon1); } } }); timer.start(); } }
Grande abraço e até o próximo post.
Referências:
Livro Java Core - Volume II (Advanced Features) - 8a edição
Nenhum comentário:
Postar um comentário