/*
* Copyright 2005 Sun Microsystems, Inc. ALL RIGHTS RESERVED
* Use of this software is authorized pursuant to the terms of the
* license found at http://developers.sun.com/berkeley_license.html
*
*/
package systemtray;
import java.awt.*;
import java.awt.event.*;
public class SystemTrayTest
{
public SystemTrayTest()
{
final TrayIcon trayIcon;
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("tray.gif");
MouseListener mouseListener = new MouseListener() {
public void mouseClicked(MouseEvent e) {
System.out.println("Tray Icon - Mouse clicked!");
}
public void mouseEntered(MouseEvent e) {
System.out.println("Tray Icon - Mouse entered!");
}
public void mouseExited(MouseEvent e) {
System.out.println("Tray Icon - Mouse exited!");
}
public void mousePressed(MouseEvent e) {
System.out.println("Tray Icon - Mouse pressed!");
}
public void mouseReleased(MouseEvent e) {
System.out.println("Tray Icon - Mouse released!");
}
};
ActionListener exitListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Exiting...");
System.exit(0);
}
};
PopupMenu popup = new PopupMenu();
MenuItem defaultItem = new MenuItem("Exit");
defaultItem.addActionListener(exitListener);
popup.add(defaultItem);
trayIcon = new TrayIcon(image, "Tray Demo", popup);
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
trayIcon.displayMessage("Action Event",
"An Action Event Has Been Peformed!",
TrayIcon.MessageType.INFO);
}
};
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(actionListener);
trayIcon.addMouseListener(mouseListener);
// Depending on which Mustang build you have, you may need to uncomment
// out the following code to check for an AWTException when you add
// an image to the system tray.
// try {
tray.add(trayIcon);
// } catch (AWTException e) {
// System.err.println("TrayIcon could not be added.");
// }
} else {
System.err.println("System tray is currently not supported.");
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
SystemTrayTest main = new SystemTrayTest();
}
}
Não é como na figura. Queria que fosse assim" :idea: Both Text and Icon" ícone ao lado do texto.
Testei o código do tutorial da SUN e do link(com JPopupMenu) em várias máquinas, inclusive com KDE e funcionou.
Na época utilizei o mesmo link que vc passou(para conseguir um menu com ícone). No fim dos comentários desse link com JPopuMenu tem uma pessoa que fala que resolveu os problemas e passa um link de um fórum em alemão(não testei o código desse link).
Enfrentei problemas com KDE foi utilizando a biblioteca Jdic, o clique do mouse no trayicon fazia o menu apenas piscar.
Na época enviei um email pro tutorial também e até hoje nada, talvez vc tenha mais sorte… :thumbup:
O problema desta solução com JPopupMenu é que o menu não desaparece até que vc clique em alguma opção.
Visitei este fórum tá em alemão mesmo (aí eu no language_tools do google: Alemão >> English >> Portuguese) Tinha lá um moderador mac_systems, que estava fazendo um código lá (bem grandinho por sinal) pra resolver estes problemas … mas que não tinha resolvido ainda. Vi também que haviam comentado sobre ClassCastExceptions que ocorriam mas não entendi bem. E sobre um possível bug (que tava até duplicado na base de dados de bugs do java :D) Mas não encontrei nenhuma pista de como resolver.
Pelo que vi no javadoc desta biblioteca ela contém no pacote org.jdesktop.jdic.tray as Classes
SystemTray - "The SystemTray class represents the System Tray for a desktop."
TrayIcon - "The TrayIcon class represents a tray Icon that can be added to a System tray."
E a classe TrayIcon suporta o JPopupMenu que pode conter ícone e texto.