JPanel mouseClicked() Methode reagiert nur zu 50%

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hey,

ich bin hier grad dabei ein Spielchen zu machen wo man wild rumklicken muss. Dummerweise reagiert
die mouseClicked() Methode nicht immer, um nicht zu sagen: Fast nie! Oftmals klick ich 5 mal und nix is...
(Ich lasse mir das ausprinten, ob sie reagiert)

Wenn man klickt wird eine Methode einer anderen Klasse aufgerufen, die überprüft unter allen Spielsteinen
ob die Maus auf einem drauf war. Erst dachte ich, die Berechnung is zu langsam, aber es dauert
0-1 ms, daran kann's also nicht liegen.

Ich weiss jetz auch nich wirklich ob es Sinn macht Code zu posten? Es is einfach so, wie ich sage:
Die Methode reagiert oft nicht, sie wird schlichtweg nicht aufgerufen.

Ich hab nur einen einzigen Thread laufen, hab ihn jetz testweise auch auf ne EventQueue gelegt,
bringt aber auch nix. Weiss auch nicht, ob es damit was zu tun hat, immerhin funktioniert mein Gameloop
einwandfrei, alles wird schön gezeichnet und da ruckelt auch nix.

Woran kann das liegen? Ich hab das schön öfters beim Programmieren gelernt, dass das irgendwie hängt,
diese mouseClicked Methode. Aber kann janich sein, was mach ich falsch?
 
Wenn wir "wild rumklicken", dann machen wir ungewollt kleine "Dragging" Bewegungen. Wir machen dann jeweils kein "mouseClicked", sondern ein "mouseDragged". Um das Problem zu lösen, können wir "mousePressed" benutzen (anstelle von "mouseClicked").
 
@Andre Uhres: achso! besten dank für die erklärung. 🙂
@CutItUpFresh: eine zeile weiter oben guggen?? ???:L
 
Andrey hat gesagt.:
@Andre Uhres: achso! besten dank für die erklärung. 🙂
@CutItUpFresh: eine zeile weiter oben guggen?? ???:L

Was will er mir damit sagen? Die Antwort steht dort nicht geschrieben. Die Antwort von andré lässt vermuten dass mouseClicked grundsätzlich überflüssig ist weil mousePressed eben mehr toleriert. meine frage war ob ich das richtig verstanden habe. besser hinschauen!
 
Fall A:
Du schaust dir eine Schaltfläche an. Führst den Mauszeiger hin. Drückst die maustaste runter. Entscheidest dich im letzten moment um, weil du siehst, dass du doch die falsche schaltfläche beinahe angeklickt hast, und führst die maus wieder von der schaltfläche weg, und lässt die maustaste erst draußen los.

=> Schaltfläche reagiert nur auf mouseClicked, aber nicht direkt auf mousePressed.

Ist zwar nicht sonderlich sinnvoll, man hätte diese option auch weglassen können, ohne allzuviel zu verlieren, aber diese option steht nun mal zur verfügung. Dir fällt vielleicht gar nicht auf, dass du davon öfter gebrauch machst, als du denkst, bei irgendwelchen programmen, etwa dem browser hier...


Fall B:
wild mit der maus herumklicken, dabei die maus schnell bewegen. mouseClicked wird nicht aufgerufen, weil die taste irgendwo runtergedrückt, und sonstwo wieder losgelassen wird, man will aber trotzdem die position wissen, an der die taste runtergedrückt wurde.

=> beim wilden herumklicken muss man schon die "punktförmigen" mousePressed ereignisse abfangen, ohne auf die "intervallförmigen" mouseClicked ereignisse zu warten.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben