Hallo,
ich versuche gerade, das Java-Projekt "Figuren" aus dem Buch "Java lernen mit BlueJ" (Barnes/Kölling) zu verbessern.
Für die, die das Projekt nicht kennen: Das Projekt hat Klassen namens "Kreis", "Quadrat" und "Dreieck", die auf einem speziellen "Leinwand"-Objekt angezeigt werden. Diese verfügen über eine Reihe von Methoden zum Verschieben, Farbe ändern etc. sowie über eine Methode "langsamHorizontalBewegen". Letztere würde ich gerne verbessern. Hier der Quellcode:
Die zeichnen-Methode hat eine Verzögerung eingebaut, indem sie auf eine warte-Methode der Leinwand zugreift:
Okay. Erzeuge ich nun zwei Kreise und führe aus:
so wird zuerst der erste Kreis langsam vertikal bewegt, dann der zweite. Das ist nicht das, was ich will: Die Kreise sollen sich gleichzeitig bewegen. Wie bekomme ich das hin?
Was ich heute morgen schon ausprobiert habe und was funktioniert hat: Kreis implements Runnable, dann langsamVertikalBewegen in run() umbenennen und in einem Thread ausführen. Aber wie kann ich dann eine weitere Methode einbauen, die den Kreis zB horizontal bewegt?
Ich hoffe, ich habe das Problem verständlich geschildert
ich versuche gerade, das Java-Projekt "Figuren" aus dem Buch "Java lernen mit BlueJ" (Barnes/Kölling) zu verbessern.
Für die, die das Projekt nicht kennen: Das Projekt hat Klassen namens "Kreis", "Quadrat" und "Dreieck", die auf einem speziellen "Leinwand"-Objekt angezeigt werden. Diese verfügen über eine Reihe von Methoden zum Verschieben, Farbe ändern etc. sowie über eine Methode "langsamHorizontalBewegen". Letztere würde ich gerne verbessern. Hier der Quellcode:
Java:
public void langsamVertikalBewegen(int entfernung) {
int delta;
if (entfernung < 0) {
delta = -1;
entfernung = -entfernung;
} else {
delta = 1;
}
for (int i = 0; i < entfernung; i++) {
yPosition += delta;
zeichnen();
}
}
Die zeichnen-Methode hat eine Verzögerung eingebaut, indem sie auf eine warte-Methode der Leinwand zugreift:
Java:
public void warte(int millisekunden) {
try {
Thread.sleep(millisekunden);
} catch (Exception e) {
// Exception ignorieren
}
}
Okay. Erzeuge ich nun zwei Kreise und führe aus:
Java:
kreis1.langsamVertikalBewegen(50)
kreis2.langsamVertikalBewegen(50)
so wird zuerst der erste Kreis langsam vertikal bewegt, dann der zweite. Das ist nicht das, was ich will: Die Kreise sollen sich gleichzeitig bewegen. Wie bekomme ich das hin?
Was ich heute morgen schon ausprobiert habe und was funktioniert hat: Kreis implements Runnable, dann langsamVertikalBewegen in run() umbenennen und in einem Thread ausführen. Aber wie kann ich dann eine weitere Methode einbauen, die den Kreis zB horizontal bewegt?
Ich hoffe, ich habe das Problem verständlich geschildert