Hallo!
Ich hab da folgendes Problem:
Ich möchte java.awt.Labels in einem Applet gleichmäßig bewegen. Dazu hab ich den java.util.Timer benutzt, und damit wird dann in bestimmten Zeitintervallen das jeweilige Label um ein Stück bewegt. Bei entsprechend kleinem delay sieht die Bewegung des Labels auch ziemlich flüssig aus und bis hierhin klappt auch alles.
Nun kommt folgendes Problem:
Ich möchte dieses Label anklicken können, sodass der MouseListener reagiert. Das funktioniert aber nur ab und zu, die meisten Klicks werden geradezu ignoriert und die Methode mouseClicked vom Listener wird gar nicht erst aufgerufen. Das liegt offensichtlich daran, dass die X-Position des Labels ständig verändert wird. Wenn ich nämlich das Delay vergrößere, somit zwischen den einzelnen Manipulationen des Labels mehr Zeit vergeht, wird auf mehr Klicks reagiert, allerdings immer noch nicht auf alle.
Jetzt hab ich schon folgendes ausprobiert:
Erstens: Das Applet selbst auf die Klicks reagieren lassen und dann mit getComponentAt(intx, int y) das entsprechende Label finden und den Klick bearbeiten lassen.
Das funktioniert natürlich nicht, weil das MouseEvent gar nicht beim Applet ankommt, sondern direkt an die unterste Child-Komponente, also das Label weitergeleitet wird.
Zweitens: Ich hab ein bischen mit synchronized experimentiert und folgende Methode geschrieben:
Damit müsste es dann ja möglich sein, ein gleichzeitiges Verschieben des Labels und Bearbeitung des Mausklicks zu verhindern; klappt aber auch nicht.
Was kann ich sonst noch tun?
Weiß irgendwer was, beziehungsweise hat das irgendwer schon mal selbst programmiert?
Vielen Dank für alle Hilfe!
Tissi
Ich hab da folgendes Problem:
Ich möchte java.awt.Labels in einem Applet gleichmäßig bewegen. Dazu hab ich den java.util.Timer benutzt, und damit wird dann in bestimmten Zeitintervallen das jeweilige Label um ein Stück bewegt. Bei entsprechend kleinem delay sieht die Bewegung des Labels auch ziemlich flüssig aus und bis hierhin klappt auch alles.
Nun kommt folgendes Problem:
Ich möchte dieses Label anklicken können, sodass der MouseListener reagiert. Das funktioniert aber nur ab und zu, die meisten Klicks werden geradezu ignoriert und die Methode mouseClicked vom Listener wird gar nicht erst aufgerufen. Das liegt offensichtlich daran, dass die X-Position des Labels ständig verändert wird. Wenn ich nämlich das Delay vergrößere, somit zwischen den einzelnen Manipulationen des Labels mehr Zeit vergeht, wird auf mehr Klicks reagiert, allerdings immer noch nicht auf alle.
Jetzt hab ich schon folgendes ausprobiert:
Erstens: Das Applet selbst auf die Klicks reagieren lassen und dann mit getComponentAt(intx, int y) das entsprechende Label finden und den Klick bearbeiten lassen.
Das funktioniert natürlich nicht, weil das MouseEvent gar nicht beim Applet ankommt, sondern direkt an die unterste Child-Komponente, also das Label weitergeleitet wird.
Zweitens: Ich hab ein bischen mit synchronized experimentiert und folgende Methode geschrieben:
Code:
public synchronized void syncManipulation(int x, int y, boolean b)
{
if(b)
super.setLocation(x, y);
else
game.gondelClicked(); // <-- Methode zur Bearbeitung des Klicks
}
Damit müsste es dann ja möglich sein, ein gleichzeitiges Verschieben des Labels und Bearbeitung des Mausklicks zu verhindern; klappt aber auch nicht.
Was kann ich sonst noch tun?
Weiß irgendwer was, beziehungsweise hat das irgendwer schon mal selbst programmiert?
Vielen Dank für alle Hilfe!
Tissi