Neste artigo iremos explorar alguns dos recursos das classes SystemTray e TrayIcon do Java 6 para com isso criarmos uma System Tray multiplataforma, para usarmos em nossas aplicações desktop, as classes SystemTray e TrayIcon fazem parte do pacote java.awt e juntas possibilitam a criação de um Tray com recursos tais como : imagens, popups,menus,submenus e itens de notificações.

 

No código descrito nesse artigo nós abordamos a maioria dos recursos dessas classes, para não ficar muito extenso, o código esta todo comentado.

 

A Figura 01 apresenta a aparência de nosso Tray.

 

cvsystrayfig01.jpg

Figura 01. Tray em execução.

 

//Importando as bibliotecas necessárias

import java.awt.AWTException;

import java.awt.CheckboxMenuItem;

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 java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JOptionPane;

 

public class Main {

   

    public static void main(String[] args) {

       

    final TrayIcon trayIcon; // declarando uma constante do tipo TrayIcon

 

    // Aqui vamos testar se o recurso é suportado

    if (SystemTray.isSupported()) {

   

    //declarando uma variavel  do tipo SystemTray

    SystemTray tray = SystemTray.getSystemTray();

   

    //declarando uma variavel  do tipo Image que contera a imagem tray.gif

    Image image = Toolkit.getDefaultToolkit().getImage("tray.gif");

   

   

     //Criamos um listener para escutar os eventos de mouse

      

    MouseListener mouseListener = new MouseListener() {

               

        public void mouseClicked(MouseEvent e) {

            

        }

 

        public void mouseEntered(MouseEvent e) {

           

        }

 

        public void mouseExited(MouseEvent e) {

           

        }

 

        public void mousePressed(MouseEvent e) {           

           

        //Toda vez que for clicado imprime uma mensagem na tela

            System.out.println("Tray Icon - O Mouse foi pressionado!");                       

        }

 

        public void mouseReleased(MouseEvent e) {

           

        }

    };

 

    // Criamos um ActionListener para a ação de encerramento do programa.

    ActionListener exitListener = new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            //Imprime uma mensagem de despedida na tela

            System.out.println("Saindo...");

            JOptionPane.showMessageDialog(null,"Saindo...");

            System.exit(0);

        }

    };

   

    // Criamos um ActionListener para a exibir uma mensagem na tela ao clicarmos

    //em um item do menu.

    ActionListener mostramsglistener = new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            JOptionPane.showMessageDialog(null,"Java 6 é uma revolução.");

        }

    };

   

    //Criando um objeto PopupMenu

    PopupMenu popup = new PopupMenu("Menu de Opções");

    //criando itens do menu

    MenuItem mostramsg = new MenuItem("Exibir Mensagem");

    MenuItem defaultItem = new MenuItem("Sair");

    //na linha a seguir associamos os objetos aos eventos

    mostramsg.addActionListener(mostramsglistener);

    defaultItem.addActionListener(exitListener);

    //Adicionando itens ao PopupMenu

    popup.add(mostramsg);

    //adiconando um separador

    popup.addSeparator();

    //Criando objetos do tipo Checkbox

    CheckboxMenuItem cheque1 = new CheckboxMenuItem("Ativar Plugins");

    popup.add(cheque1);

    CheckboxMenuItem cheque2 = new CheckboxMenuItem("Iniciar Minimizado");

    popup.add(cheque2);

    popup.addSeparator();

    //Criando um submenu

    PopupMenu popup2 = new PopupMenu("SubMenu de Opções");

    MenuItem mostramsg2 = new MenuItem("Item1");

    MenuItem mostramsg3 = new MenuItem("Item2");

    MenuItem mostramsg4 = new MenuItem("Item3");

    popup2.add(mostramsg2);

    popup2.add(mostramsg3);

    popup2.add(mostramsg4);

    popup.add(popup2);

    popup.addSeparator();

    popup.add(defaultItem);

   

    //criando um objeto do tipo TrayIcon

    trayIcon = new TrayIcon(image, "TrayIcon Demonstração", popup);

 

    ActionListener actionListener = new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            trayIcon.displayMessage("Action Event",

                "Um Evento foi disparado",

                TrayIcon.MessageType.INFO);

        }

    };

    

    //Na linha a seguir a imagem a ser utilizada como icone sera redimensionada

    trayIcon.setImageAutoSize(true);

    //Seguida adicionamos os actions listeners

    trayIcon.addActionListener(actionListener);

    trayIcon.addMouseListener(mouseListener);

   

    //Tratamento de erros

    try {

        tray.add(trayIcon);

    } catch (AWTException e) {

        System.err.println("Erro, TrayIcon não sera adicionado.");

    }

 

} else {

 

        //Caso o item  System Tray não for suportado

        JOptionPane.showMessageDialog(null,"recurso ainda não esta disponível pra o seu sistema");

}

}

}// Fim do código.

 

Em nosso exemplo não usei nenhuma IDE, por isso vamos compilar tudo no modo texto, mas nada impede que o leitor use sua IDE preferida.

 

É importante lembrar que será necessário ter uma imagem chamada tray.gif no diretório corrente para que o ícone de nosso tray seja mostrado.

 

A Figura2 demonstra o processo de compilação e execução do Tray.

 

cvsystrayfig02.jpg

Figura 02. Compilando e Executando o Tray.

 

Na Figura 03 mostramos o no nosso Tray rodando na area de Notificação do KDE.

 

cvsystrayfig03.jpg

Figura 03.

 

Ao colocarmos o mouse sobre o ícone é mostrada uma dica sobre o aplicativo (Figura 04).

 

cvsystrayfig04.jpg

Figura 04.

 

Se for dado um duplo clique no ícone da aplicação será exibido uma tela de notificação (Figura 05).

 

cvsystrayfig05.jpg

Figura 05.

 

Ao clicarmos com o botão direito do mouse é aberto o Menu popup (Figura 6). As opções mostradas são apenas ilustrativas, apenas existem ações associados ao item mensagem e sair. O item Sair executa uma ação de sair e mostra uma tela de despedida do aplicativo. O Item mensagem mostra outra mensagem, falta criar ações para os outros itens, isso fica por conta da criatividade de vocês.

 

cvsystrayfig06.jpg

Figura 06.

 

Na Figura 7 Vemos a Execução do Tray na plataforma Windows (Figura7) e com isso fechamos esse artigo. Até aproxima!

 

cvsystrayfig07.jpg

Figura 07. Tray sendo executado na plataforma windows.