TrayIcon im SystemTray - mouseReleased funktioniert, mouseEntered aber nicht

January

Mitglied
Hallo zusammen.

Kann mir jemand erklären, warum im folgendem Code die überschriebenen Methoden "mouseReleased", "mouseClicked" und "mousePressed" reagieren, "mouseEntered" und "mouseExited" aber nicht? Ich komme einfach nicht drauf...
Java:
package beispiel;

public class START {
	public static void main(String[] args) {
		new Tray();
	}
}
Java:
package beispiel;

import java.awt.Image;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;



public class Tray{

	private static final long serialVersionUID = 1L;
	private static TrayIcon myTrayIcon;
	private static SystemTray trayLeiste;
	
	public Tray(){
		try {
			Image iconGruen = Toolkit.getDefaultToolkit().getImage(
					getClass().getResource("/icons/UhrGruen16x16.png"));
			myTrayIcon = new TrayIcon(iconGruen);
			trayLeiste = SystemTray.getSystemTray();
			trayLeiste.add(myTrayIcon);
			myTrayIcon.addMouseListener(new MouseListener() {
				
				@Override
				public void mouseReleased(MouseEvent e) {
					System.out.println("Released");
				}
				
				@Override
				public void mousePressed(MouseEvent e) {
					System.out.println("Pressed");
				}

				@Override
				public void mouseExited(MouseEvent e) {
					System.out.println("Exited");
				}

				@Override
				public void mouseEntered(MouseEvent e) {
					System.out.println("Entered");
				}

				@Override
				public void mouseClicked(MouseEvent arg0) {
					System.out.println("Clicked");
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
Ich brauche möchte auf die mouseEntered-Methode zugreifen, um den Tooltip erst in dem Moment zu generieren, in dem er gebraucht wird (nämlich dann wenn die Maus über das Icon fährt).

Danke für eure Hilfe!
January
 

genodeftest

Erfahrenes Mitglied
Das liegt am Betriebssystem bzw. am Desktop Envrionment. Unter Gnome3 wäre es z.B. vollkommener Unsinn, so etwas für TrayIcons zu implementieren.
Vermutlich ist das in Java (OpenJDK, Oracles JRE) einfach nicht implementiert.
 
S

SE

Wie GNOME kann mit "normalen" TrayIcons nichts anfangen ? Was muss man denn dafür verweden ? SWT ? Kann auch an deinem JDK / JRE liegen das es unterschieden zwischen OpenJDK und Oracle's CLOSED Version gibt.

BTW : ich habs getestet : bei mir reagieren mouseEntered und mouseExited auch nicht.
 

January

Mitglied
Hallo zusammen und danke für eure Antworten.

In meinem Fall läuft das Programm unter Windows7 32Bit.Den Gedanken, dass es am Betriebssystem liegt hatte ich auch schon. Allerdings müsste es doch eine Möglichkeit geben, so etwas wie "mouseEntered" abgreifen zu können. Der normale Tooltip wird ja schließlich auch angezeigt, wenn ich mit der Maus auf das Icon fahre...
Und ich habe gerade festgestellt, dass wenn ich
Java:
myTrayIcon.addMouseMotionListener(new MouseMotionListener() {
			
			@Override
			public void mouseMoved(MouseEvent e) {
				System.out.println("move");
				
			}
			
			@Override
			public void mouseDragged(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
implementiere, auch "mouseMoved" Ergebnisse liefert .Im Notfall würde ich mich vielleicht daran hängen. Vielleicht hat ja aber noch jemand von euch ne bessere Idee.

Danke, January
 

genodeftest

Erfahrenes Mitglied
Der Tooltip wird aber auch mit Betriebssystem-eigenem Code generiert, nicht mit Java-Code. Deshalb hast du kenen Einfluss darauf.