# Wenn Mausgehalten wird MousePressed ansonsten MouseClicked?



## MouseListener (9. Mai 2005)

Hi!

Schlag mich nun seit einigen Stunden mit folgendem Problem rum:

Möchte gerne 2 verschiedene Aktionen auf einen Button legen, einerseits ein "normales" Click-Event
wenn der User nur kurz auf den Button klickt, andererseits ein Event das nur dann ausgeführt wird,
wenn der User 1-2 Sekunden lang die Maus gedrückt hält ...

Leider führt er bei mir sofort MousePressed aus, dnach kommt dann MouseReleased und dann nochmal das
normale Clicked Event ...

Hatte schon versucht nen Thread drumherum zu basteln aber es ging in die Hose  :lol: 

Wäre nett wenn mir da jemand weiterhelfen könnte!


----------



## Wildcard (9. Mai 2005)

Überprüf doch einfach die Zeit zwischen drücken und loslassen der Maustaste. >2 Sekunden -> aktion ausführen.


----------



## Manfred (9. Mai 2005)

Hmm eventuell würde das gehen:

Mouse Clicked - aktuelle Zeit in Variable schreiben
Mouse Released - aktuelle Zeit minus vorherige Zeit
Wenn Zeit > xxx millisec. dann = "langer" Klick, sonst einfacher


----------



## MouseListener (9. Mai 2005)

hmm ne irgendwie klappt das nicht so wirklich ;-)
ich wil ja die aktoin nicht erst ausführen wenn die maustaste losgelassen werden soll ...


----------



## Wildcard (9. Mai 2005)

Dann benutz einen Timer


----------



## MouseListener (9. Mai 2005)

Hmm ...

ich glaub ich bin einfach zu doof dafür  - wenn man den ganzen tag schon davor sitzt -> :autsch:
die versuche schlagen sowohl mit timer als auch mit threads immer fehl  :cry:


----------



## Wildcard (9. Mai 2005)

Ich würd's so machen:

```
frame.addMouseListener(new MouseAdapter() {
		boolean mouseDown = false;
			public void mouseReleased(MouseEvent e)
			{
				mouseDown=false;
			}
		
			public void mousePressed(MouseEvent e)
			{
				Timer t = new Timer(2000, new ActionListener() {
					
						public void actionPerformed(ActionEvent e)
						{
							if(mouseDown)
								doSomethingCool();
							
						}
					
					});
				t.start();
				mouseDown=true;
			}
		
		});
```


----------



## MouseListener (9. Mai 2005)

Hmm also ich weiss nicht wie das bei dir gehen soll .. nen Timer mit nem ActionListener zu erzeugen ...
Bei mir kommt da ne Fehlermeldung ...


----------



## Wildcard (9. Mai 2005)

Nimm nicht den util sondern den Swing Timer!


----------



## MouseListener (9. Mai 2005)

hmm ne läuft immer noch nicht ...

dann macht ers beim ersten mal "richtig" und lässt mich freudentänze vollführen, 
wenn die maus dann aber losgelassen wird oder woanders hingeklickt wird und
das ganze nochmal getestet werden soll hauts schon nicht mehr hin ... so ein mist!

 :cry:


----------



## Wildcard (9. Mai 2005)

So müsste es besser gehen:

```
frame.addMouseListener(new MouseAdapter() {
		boolean mouseDown = false;
		Timer t;
			public void mouseReleased(MouseEvent e)
			{
				mouseDown=false;
				t.stop();
			}
		
			public void mousePressed(MouseEvent e)
			{
				t = new Timer(2000, new ActionListener() {
					
						public void actionPerformed(ActionEvent e)
						{
							if(mouseDown)
								doSomethingCool();
						}
					
					});
				t.start();
				mouseDown=true;
			}
		
		});
```


----------



## Sky (9. Mai 2005)

MouseListener hat gesagt.:
			
		

> hmm ne irgendwie klappt das nicht so wirklich ;-)
> ich wil ja die aktoin nicht erst ausführen wenn die maustaste losgelassen werden soll ...



Dann mal die Frage: ist die zweite Aktion optional, heißt die erste Aktion wird immer ausgeführt und die zweite nur bei langem Klick. 
Oder soll entweder die erste oder die zweite Aktion ausgeführt werden? Dann mußte wohl warten bis entweder die Maus losgelassen wird oder zumindestens die 2 Sek. um sind.


----------

