January
Mitglied
Hallo zusammen.
Nach langer, ergebnisloser Suche hoffe ich jetzt hier auf eine Antwort:
Ich möchte, dass bei einem Rechts- und Links-Klick auf das TrayIcon jeweils ein unterschiedliches JPopupMenu (nicht PopupMenu) erscheint. Da "TrayIcon" nur PopupMenu und das auch kein zweites Menü unterstützt, habe ich das jetzt so gelöst:
Nun zu meinem Problem: Wenn ich eins der Menüs anwähle kann ich es nicht durch "danebenklicken" oder esc. wieder abwählen. Es bleibt so lange offen bis ich einen Eintrag angeklickt habe.
Hat jemand für euch eine Lösung für dieses Problem? Wenn es eine besser Lösung gibt zwei JPopupMenu mit einem Tray-Symbol zu verwenden immer her damit. Bin noch ein ziemlicher Java-Anfänger.
Danke! January
Nach langer, ergebnisloser Suche hoffe ich jetzt hier auf eine Antwort:
Ich möchte, dass bei einem Rechts- und Links-Klick auf das TrayIcon jeweils ein unterschiedliches JPopupMenu (nicht PopupMenu) erscheint. Da "TrayIcon" nur PopupMenu und das auch kein zweites Menü unterstützt, habe ich das jetzt so gelöst:
Code:
package test;
import java.awt.AWTException;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
public class tray {
final static SystemTray tray = SystemTray.getSystemTray();
static TrayIcon trayIcon = null;
final static JPopupMenu popupRechts = new JPopupMenu();
final static JPopupMenu popupLinks = new JPopupMenu();
final static JMenuItem itemLinks = new JMenuItem("Beispiel Links");
final static JMenuItem itemRechts = new JMenuItem("Beispiel Rechts");
final static JMenuItem beenden = new JMenuItem("Beenden");
public static void traySymbol() {
beenden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tray.remove(trayIcon);
}
});
popupLinks.add(itemLinks);
popupRechts.add(itemRechts);
popupRechts.add(beenden);
Runnable runner = new Runnable() {
public void run() {
if (SystemTray.isSupported()) {
Image image = Toolkit.getDefaultToolkit().getImage(
getClass().getResource("/icons/clock.png"));
trayIcon = new TrayIcon(image, "PopUp-Text");
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
int klick = e.getButton();
switch (klick) {
case 1: // Links-Klick
popupLinks.setLocation(e.getX(), e.getY());
popupLinks.setInvoker(popupRechts);
popupLinks.setVisible(true);
break;
case 2: // Mitte-Klick
break;
case 3: // Rechts-Klick
popupRechts.setLocation(e.getX(), e.getY());
popupRechts.setInvoker(popupRechts);
popupRechts.setVisible(true);
break;
default:
System.out.println("Unbekannter Maus-Klick!");
}
}
});
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println("Oeffnen im Tray nicht moeglich");
}
} else {
System.err.println("Tray nicht verfuegbar");
}
}
};
EventQueue.invokeLater(runner);
}
public static void main(String[] args) {
traySymbol();
}
}
Nun zu meinem Problem: Wenn ich eins der Menüs anwähle kann ich es nicht durch "danebenklicken" oder esc. wieder abwählen. Es bleibt so lange offen bis ich einen Eintrag angeklickt habe.
Hat jemand für euch eine Lösung für dieses Problem? Wenn es eine besser Lösung gibt zwei JPopupMenu mit einem Tray-Symbol zu verwenden immer her damit. Bin noch ein ziemlicher Java-Anfänger.
Danke! January