Suite au post d'une source sur le site : http://www.javafr.com/codes/MANIPULER-BARRE-SYSTEME_36279.aspx je me suis dit que quelques explications permettraient d'éclaircir les choses !
Manipuler la barre système
Une des nouvelles fonctionnalités très intéressantes decette version de Java est lintégration en standard de la gestion de la barresystème. Auparavant, vous auriez utilisé une des librairies externes :SysTray (http://systray.sourceforge.net/)ou JTray (http://www.javaapis.com/jtray/).Aujourdhui, avec la disponibilité de cette fonctionnalité dans le JDK 6, Sunfrappe un grand coup pour intégrer vos applications dans le systèmedexploitation hôte.
La classe principale que vous utiliserez pour avoir accès àla barre système est java.awt.SytemTray.Il nexiste quune seule instance de SystemTraydans une application Java, et pour obtenir celle-ci vous devez utiliser laméthode statique SystemTray.getSystemTray().
Néanmoins, Java se voulant portable sur les différentssystèmes dexploitation du marché, il se peut que cette fonctionnalité ne soitpas disponible sur le système cible qui exécutera votre application. Parconséquent, il est judicieux de vérifier au préalable le support de la barresystème à laide de la méthode statique SystemTray.isSupported().Si vous utilisez néanmoins cette fonctionnalité alors que celle-ci nest pasdisponible, vous risquez de devoir intercepter une exception java.lang.UnsupportedOperationException.
Une fois que vous avez récupéré votre instance du SystemTray, vous allezpouvoir ajouter des objets TrayIcon,qui représente tout simplement une icône dans la barre système. Vouspourrez ajouter/supprimer plusieurs de ces objets dans votre application.Néanmoins, lajout dun objet TrayIconà SystemTray doitgérer lexception AWTException.Celle-ci ne sera lancée que si vous ne pouvez pas ajouter le TrayIcon, par exemple sivotre bureau ne possède pas de barre système !
Le code suivant illustre cette nouvelle fonctionnalité :
final TrayIcontrayIcon;
if(SystemTray.isSupported()) {
SystemTray tray =SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("duke.gif");
PopupMenu popup = newPopupMenu();
MenuItem defaultItem = new MenuItem("Quitter");
defaultItem.addActionListener(new ActionListener() {
public voidactionPerformed(ActionEvent e) {
System.exit(0);
}
});
popup.add(defaultItem);
trayIcon = newTrayIcon(image, "Java 6 Demo !", popup);
ActionListener actionListener = new ActionListener() {
public voidactionPerformed(ActionEvent e) {
trayIcon.displayMessage("Java 6 newfeature !",
"Le System Tray en action!",
TrayIcon.MessageType.INFO);
}
};
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(actionListener);
try {
tray.add(trayIcon);
} catch(AWTException e) {
e.printStackTrace();
}
} else {
...
}
Comme vous pouvez le constater dans lexemple, un objetTrayIcon est beaucoup plus quune simple icône dans la barre système. Celle-cipeut se transformer en message popup et en menu AWT (la limite à ce type demenu est donc celui des menus AWT, ce qui se traduit par une liberté de choixdans la réalisation de menus complexes).
Un objet TrayIconreçoit les évènements de la souris, celui-ci peut donc être associé avec des listeners tel que actionListener, mouseListener et mouseMotionListener. Celadevrait vous donner la possibilité de réaliser des menus très interactifs.Néanmoins, certains évènements sont directement consommés par lobjet, parexemple, le double clic avec le bouton droit de la souris affiche le menuassocié lors de la construction de lobjet TrayIcon.
Une fois lobjet TrayIconcréé, vous aurez tout le loisir de changer ses propriétés pendant lexécutionde votre application. Cest le cas du menu popup, de limage ou encore dumessage tooltip qui saffiche lorsque vous passez la souris dessus.
Bon courage !