Adicionando ícones ao System Tray

O system tray é situada no Windows Taskbar, geralmente no canto direito inferior ao lado do relógio. Ela contém ícones diminutos para o acesso fácil às funções do sistema tais como ajustes do antivírus, impressora, modem, o volume sadio, o status da bateria, e o mais. O Duplo-clique ou o clique com botão direito no ícone permitem a visualização e o acesso aos detalhes e aos controles da aplicação que estiver neste local. O system tray foi introduzida primeiramente com Microsoft Windows 95, e é usada agora no Windows 98, 98SE, NT 4.0, 2000, e XP. A Figura 1 mostra exatamente os tray icons no sistema operacional Windows XP.

O Java 1.5 não tem uma api permitindo que você adicione ícones ao system tray, logo, você necessita usar uma biblioteca que use JNI (Java Native Interface) habilitada a implementar esta funcionalidade.

JDIC (JDesktop Integration Components) (https://jdic.dev.java.net/) permite a criação de tray icon no desktop (no System Tray do sistema para plataformas de Windows, ou na área da notificação para plataformas do Unix), com um subtítulo (text), um ícone animado, e um menu que contem ícones. Pode também apresentar um tooltip quando o mouse fica parado sobre o ícone da bandeja.

dicatrayicon.JPG
Figura 1: Tray icons

O exemplo abaixo mostra como implementer algumas funcionalidades. Você pode aprender mais sobre isso na documentação do JDIC.

import java.awt.event.*;
import javax.swing.*;
import org.jdesktop.jdic.tray.*;

public class TestTray {
    public static JMenuItem quit;
    
    public TestTray() {
        JPopupMenu menu = new JPopupMenu("Tray Icon Menu");
        menu.add(new JMenuItem("Test Item"));
        menu.addSeparator();
        JMenuItem quitItem = new JMenuItem("Quit");
        quitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                System.exit(0);
            }});
        menu.add(quitItem);
        
        // O arquivo “devmedia.gif” deve existir no mesmo diretório

        // onde estiver esta classe.
        ImageIcon icon = new ImageIcon("duke.gif");
        TrayIcon ti = new TrayIcon(icon, "JDIC Tray Icon API Test", menu);

        // Ação para clique com botão esquerdo.
        ti.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, 
                    "JDIC Tray Icon API Test!""About",
                    JOptionPane.INFORMATION_MESSAGE);
            }
        });
               
        SystemTray tray = SystemTray.getDefaultSystemTray();
        tray.addTrayIcon(ti);
    }

    public static void main(String[] args) {
        new TestTray();
    }   
}