Problem mit MouseMotionListener

  • Themenstarter Themenstarter Nowhereman
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
N

Nowhereman

Gast
Hallo,

ich bin gerade dabei ein Programm zu programmieren, das Gitarrentabs berechnet und grafisch ausgibt. Wenn man mit gedrückter Maustaste über die Saiten der Tabs fährt sollte man dann auch die passenden Töne hören. Dafür frage ich in der MouseDragged()-Methode einfach die Y-Position der Maus ab. Wenn sie genau über einer Saite ist, wird eine Methode aufgerufen die den entsprechenden Ton abspielt. Im Grunde klappt das auch alles, aber wenn ich schnell über alle Saiten fahre geschieht gar nichts oder es werden nur ein oder zwei Töne abgespielt. Irgendwie kommt es mir so vor, als würde der MouseMotionListener bei schnellen Mausbewegungen nicht mehr mitkommen?! An dem Audio-Abspielen liegt es nicht, da es auch für andere einfache Befehle (wie System.out.println) nicht funktioniert wenn ich die Maus zu schnell bewege.

Hier noch der Code meiner mouseDragged()-Methode:

Code:
public void mouseDragged(MouseEvent event) {
		mouseX = event.getX();
		mouseY = event.getY();
		/* 1.Saite
		 */
		if (mouseY == 76 && !tab[pos].getStringMuted(0)) {
			System.out.println("maus1"); // dient nur zum Test
			play.playString(0, tab[pos].getFret(0));
			System.out.println("maus2"); // dient nur zum Test
		}
		/* 2.Saite
		 */
		if (mouseY == 120 && !tab[pos].getStringMuted(1)) {
			System.out.println("maus1");
			play.playString(1, tab[pos].getFret(1));
			System.out.println("maus2");
		}
		/* 3.Saite
		 */
		if (mouseY == 169 && !tab[pos].getStringMuted(2)) {
			System.out.println("maus1");
			play.playString(2, tab[pos].getFret(2));
			System.out.println("maus2");
		}
		/* 4.Saite
		 */
		if (mouseY == 215 && !tab[pos].getStringMuted(3)) {
			System.out.println("maus1");
			play.playString(3, tab[pos].getFret(3));
			System.out.println("maus2");
		}
		/* 5.Saite
		 */
		if (mouseY == 260 && !tab[pos].getStringMuted(4)) {
			System.out.println("maus1");
			play.playString(4, tab[pos].getFret(4));
			System.out.println("maus2");
		}
		/* 6.Saite
		 */
		if (mouseY == 300 && !tab[pos].getStringMuted(5)) {
			System.out.println("maus1");
			play.playString(5, tab[pos].getFret(5));
			System.out.println("maus2");
		}
       }

Ich wäre sehr dankbar, wenn mir jemand einen Tipp geben könnte!
 
Du bekommst vom OS keine Pixelgenaue Auflösung bei schnellen Bewegungen geliefert.
Du kannst zB die erhaltenen Koordinaten mit Linien verbinden um herauszufinden was 'berührt' wurde
 
Danke! Es funktioniert jetzt einigermaßen, nur manchmal hängt er sich für ein paar Sekunden auf wenn zuviele Töne gleichzeitig gespielt werden. Wie kann man das umgehen?
 
Du wirst mir recht geben müssen das 'sich aufhängen' kein Allgemeines Java Problem ist.
Daher gibt es auch keine allgemeingültige Lösung...
 
Stimmt.. Trotzdem danke für deine Hilfe, ich werd mal ein wenig rumprobieren.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben