Lösung für Problem mit dem Vector
-
Mhh, das kapiere ich jetzt immer noch nicht ganz. Also, ich dachte, wenn das Interface implementiert ist, das dann die Methoden gleich bekannt sind. Aber naja.
Also das mit dem instanceof. Also muss ich das so machen, dass ich dann in das Interface caste? Also egal welche Klasse ich vom Vector haben will, sobald sie das Interface implementiert, brauche ich sie nur noch in den Interfacetypen casten da das Interface den Datentyp der Klasse verändert? Habe ich das richtig verstanden?
-
Yep!
-
*TRÄLLA*
-
Sehr gut, Danke CengizS!
Das zumindest, klappt jetzt!
Noch eine Frage: Ich habe mal meine run-Methode getestet, weil ich irgendwie Probleme mit dem repainten habe, also meine Objekte werden nicht neugezeichnet, das irgendwas mit der Veränderung der Koordinaten nicht klappt, aber eine andere Sache, die mir dabei auffiel.Ist es normal, dass nur bei jedem 8. Durchlauf der run-Methode repaint aufgerufen wird? Doch eher nicht, oder?
[ Dieser Beitrag wurde am 02.01.2003 um 01:01 Uhr von Pogo editiert. ]
-
Original erstellt von Pogo:
**
Ist es normal, dass nur bei jedem 8. Durchlauf der run-Methode repaint aufgerufen wird? Doch eher nicht, oder?
**Könnte schon normal sein! ...am Besten, du zeigst das mal her. Wenn du etwas bei jedem Durchlauf der der run-Methode neu zeichnen möchtest, dann kannst du mal folgendes ausprobieren:
[java]
etwas.paint(etwas.createGraphics());[/code]
...sag mal Bescheid, ob das klappt. Das interessiert mich auch.EDIT : Warum das normal sein könnte :
AFAIK ist es so, dass die GUI einen extra-Thread besitzt. Wenn du repaint aufrufst, dann wird nicht automatisch sofort neu gezeichnet, sondern der andere Thread bekommt eine Nachricht in irgendeinen Behälter (ne LinkedList oder so). Diese Nachricht wird erst dann bearbeitet, wenn der GUI-Thread wieder dran ist. Es kann aber sein, dass die Schleife in deiner run-Methode mehrmals durchlaufen wird, bevor der GUI-Thread wieder dran ist. ...dann müßte die Nachricht an den GUI-Thread eigentlich mehrmals in dem Behälter gespeichert werden, ich denke aber, dass mehrfache Nachrichten einfach ignoriert bzw. gelöscht werden.
(Das war jetzt zu mindestens 50% geraten! :))
[ Dieser Beitrag wurde am 02.01.2003 um 06:53 Uhr von Gregor editiert. ]
-
Mhh, also ich werde es mal versuchen. Mhh, ic habe wohl vergessen, unter welchen Umständen die paint-methode nur jedes 8. Mal aufgerufen wird, aber du hast es ja trtozdem verstanden Gregor.
Also, so sieht meine run-Methode aus:
public void run() {
while(runner != null) {
try {
Thread.sleep(500);
} catch (InterruptedException e) { }
System.out.print(x+"//"+y+" ");
x += rx;
y += ry;
repaint();
}
}Naja, also mit print, habe ich eben die ganze Sache mal überprüft, und das ganze natürlich ein bisschen verlangsamt, da ich sonst nicht wirklich mitgekommen wäre(Ich habe über DOS-Ausgabe noch etliche andere Werte überprüft, weil da bei meinem Prog. so einiges nicht klappt... ).
So, zu deinem Vorschlag, wie genau meinst du das?
So in der Art: "this.paint(this.createGraphics());" ?
Also, die run-Methode soll in meinem Fall, ihren eigenen Inhaber neuzeichnen.
-
ersetze "repaint ();" durch
paint (getGraphics());
...createGraphics scheint es nicht überall zu geben.
-
Ok, das mit dem createGraphics hat auch nicht geklappt, also, könnte ich das mal versuchen. So, jetzt ist mir aber ganz entgangen, wieso. Denn jetzt klappt mein Prog, gut, es wird immer nur noch bei ca. jedem 8. Durchlauf neugezeichnet, aber wenigtens klappt es. Vorher hats nicht geklappt, und ich habe keine Ahnung warum. Also es soll ja immer ein bewegl. Objekt gez. werden, also habe ich die x und y Koordinaten in der run-Methode verändern wollen. Aber das hat nicht geklappt, also habe ich den gleichen code in die paint-Methode geschr. und jetzt klappt´s...
Ok, aber ich werde das mal probieren, vielleicht wird ja dann wirklich bei JEDEM Durchlauf neugezeichnet.
-
Wenn ihr wollt dass das Objekt wirklich immer neu gezeichnet wird müsst ihr invalidate() auf das Objekt aufrufen mit anschließendem validate(). Damit sollte die Komponente dazu gezwungen werden sich neu zu zeichnen.
-
Danke CengizS!
Damit könnte ich nämlich meine nächste Frage lösen. Denn wenn ich so Sachen zeichne, sieht das immer ziemlich Ruckartig aus. Wenn ich aber bei jedem Durchlauf die Koordinaten einfach um eins erhöhe und die Komponente zum repaint gezwungen wird, dann sieht das doch bestimmt schon viel flüssiger aus.