468x60

mercoledì 19 agosto 2009

System Tray in Java

Alcune volte occorre mostrare sulla System Tray del nostro sistema operativo un’icona della nostra applicazione, magari con qualche simpatica opzione o magari solo quando l’applicazione è minimizzata. Vediamo come ciò sia possibile utilizzando la classe SystemTray della libreria AWT presente dalla versione 6 di Java.

La classe SystemTray rappresenta la barra delle applicazioni della nostra scrivania. Su alcuni sistemi operativi, o più genericamente dovremmo parlare di desktop environment, la System Tray potrebbe non esistere o non essere supportata in questo caso quando cercheremo di ottenere l’istanza dell SystemTray con il metodo getSystemTray() verrà sollevata l’eccezione UnsupportedOperationException. Per testare se la barra è supportata basterà utilizzare il metodo isSupported().

La SystemTray può contenere più icone TrayIcon, aggiunt con il metodo add(java.awt.TrayIcon), e eliminate quando non più utili con remove(java.awt.TrayIcon). La classe TrayIcon consiste in un’immagine, un menù a popup e un insieme di listeners ad esso associati.

Vediamo un semplice esempio di utilizzo:

/**
*
* @author Carmelo Saffioti
*/
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.JOptionPane;

public class SysTrayDemo {

public static void main(String[] args) throws Exception {

if (!SystemTray.isSupported()) {
System.out.println("La SystemTray non è supportata");
return;
}

SystemTray tray = SystemTray.getSystemTray();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage("trayIcon.jpg");

PopupMenu menu = new PopupMenu();

MenuItem messageItem = new MenuItem("Mostra messaggio");
messageItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "www.carmelosaffioti.it");
}
});
menu.add(messageItem);

MenuItem closeItem = new MenuItem("Chiudi");
closeItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
menu.add(closeItem);

TrayIcon icon = new TrayIcon(image, "SystemTray app", menu);
icon.setImageAutoSize(true);
try {
tray.add(icon);
} catch (AWTException e) {
System.out.println("La TrayIcon non può essere aggiunta");
}
}
}

Nessun commento:

Posta un commento

468x60

Cerca su Google

Cerca nel Blog con Google