Timer und Timertask fuer delay

MiMi

Erfahrenes Mitglied
Hi,

und zwar habe ich ein JPanel worauf ich einen MouseListener gelegt hab. Sobald ich mit der Maus nun in das Pannel komme, wird per MouseEntered ein MouseMotionListener hinzugefuegt.
In dem JPanel sind mehrere Bilder verschiedener Objekte, dort soll dann pro Bild ein pop up mit Informationen erscheinen. Beim MouseMove errechne ich auf welchem Bild die Maus steht und lasse dann ein JWindow erscheinen mti den Infos. Jetzt wollte ich ein delay hinzufuegen, sodass die Maus erst einige Zeit auf dem Bild sein muss bevor das Informationsfenster erscheint. Funktioniert auch super mit Timer und Timertask.
Java:
				TimerTask timerTask = _timerTask;
				if ( timerTask != null )
				{
					System.out.println( "cancel timer for last object ");
					timerTask.cancel();
				}
				timerTask = new TimerTask()
				{
					public void run()
					{
						show( );
					}
				};
System.out.println( "start timer for current object" );
				_timerTask = timerTask;
				_timer.schedule( timerTask , DELAY );
In der show methode wird dann das Jwindow befuellt und auf visible gesetzt.
Jetzt hab ich nen Problem wenn ich etwas zu lange auf einem verweile und dann das Fenster verlasse (MouseExited) wird dennoch das Informationsfenster angezeigt.
Java:
	public void mouseExited( final MouseEvent e )
	{
		System.out.println( "______ MOUSE EXITED ______ " );
		if ( _timerTask != null )
		{
			System.out.println( "cancel timer for current object"  );
			_timerTask.cancel();
		}
...
______ MOUSE ENTERED ______
cancel timer for last object
start timer for current object
______ MOUSE EXITED ______
cancel timer for current object
show
Der Timer wird zwar gecancelt, dennoch wird danach show aufgerufen.

Verweile ich net so lange mit der Maus in dem Panel kommt volgende Ausgabe
______ MOUSE ENTERED ______
cancel timer for last object
start timer for current object
______ MOUSE EXITED ______
cancel timer for current object

Vielleicht weiss von euch einer weiter. Danke schonma :D
 
Ok, habs rausgefunden. Ich musste noch nen boolean machen, wo ich dann schauen muss ob der auf true ist und erst dann das frame anzeigen darf.
 

Neue Beiträge

Zurück