[JAVA] Creer un icone pour l`afficher dans la barre système windows

durje Messages postés 2 Date d'inscription mercredi 29 novembre 2006 Statut Membre Dernière intervention 21 août 2009 - 20 août 2009 à 11:29
durje Messages postés 2 Date d'inscription mercredi 29 novembre 2006 Statut Membre Dernière intervention 21 août 2009 - 21 août 2009 à 14:44
Bonjour j`espère que je pose ma question au bonne endroit dans le forum..

Voila mon problème, je récupère des informations de température d`un microcontroleur Atmel, via un FTDI232, sur le port COM de l`ordinateur.

Une fois les informations récupéré, j`aimerai afficher cette température sur un petit icône dans la barre système Windows en bas a droite.

J`ai trouver une classe (http://www.javafr.com/codes/MANIPULER-BARRE-SYSTEME_36279.aspx) qui fonctionne et qui permet d`afficher un icône ou je veux.

Mon problème est que je n`arrive pas a trouver des informations pour créer,éditer un icône, en imposant un fond d`écran et la température tout simplement.
Je ne veux pas faire appelle a une image extérieure, juste la créer, a partir d`un JPanel peut être ???

Si vous avez une solution merci a l`avance..

2 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
21 août 2009 à 11:43
Salut,

voici pour un exemple de code simpliste pour modifier une icone qui est dans le systray.
Ce bout de code (vite fait) est basé sur l'exemple du lien que tu donnes.
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

public class Test {
private static final int WIDTH		= 24;
private static final int HEIGHT		= 24;
private int              value		= 0;	// valeur
private TrayIcon         trayIcon	= null;
private MyImageRefresh   refresh	= null;

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

public Test() {
buildTray();
}

private void buildTray() {
if (SystemTray.isSupported()) {

final SystemTray tray = SystemTray.getSystemTray();
final PopupMenu popup = new PopupMenu();
final MenuItem defaultItem = new MenuItem("Quitter");
defaultItem.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
if (refresh != null)
refresh.end();
System.exit(0);
}
});
popup.add(defaultItem);

trayIcon = new TrayIcon(getImage(), "Test icon thread !", popup);

final ActionListener actionListener = new ActionListener() {
public void actionPerformed(final ActionEvent e) {
trayIcon.displayMessage("Java 6 new feature !",
"Le System Tray en action !",
TrayIcon.MessageType.INFO);
}
};
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(actionListener);

try {
tray.add(trayIcon);
// démarrage du thread
refresh = new MyImageRefresh();
refresh.start();
} catch (final AWTException e) {
e.printStackTrace();
}

} else {
// ...
}
}

public BufferedImage getImage() {
// création de l'image
// ici le code est fait à l'arache et absolument pas optimisé.
final BufferedImage img = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_ARGB);
final Graphics2D g2 = img.createGraphics();
g2.setColor(Color.BLACK);
g2.drawString("" + value, 2, 15);
return img;
}

private class MyImageRefresh extends Thread {
private boolean	end	= false;

public void run() {
while (!end) {
// refresh toute les secondes
try {
sleep(1000);
} catch (final InterruptedException e) {
e.printStackTrace();
}
// juste un petit test pour faire bouger le text de l'icon
if (value < 100)
value++;
else
value = 0;
                                // modification de l'image
synchronized (trayIcon) {
trayIcon.setImage(getImage());
}
}
}

public void end() {
end = true;
}
}
}





------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
durje Messages postés 2 Date d'inscription mercredi 29 novembre 2006 Statut Membre Dernière intervention 21 août 2009
21 août 2009 à 14:44
Je te remercie pour la rapidité de la réponse, je vais tester ca se weekend je vous tien au courant lundi

Merci encore
0
Rejoignez-nous