# Position eines Image verändern mithilfe eines Timers



## Tim Oberdammer (27. Dez 2018)

Ich bräuchte mal wieder Hilfe von euch ich bin noch relativ neu in der GUI Programmierung.
Ich habe ein Image und möchte dieses mithilfe eines Timers bewegen. Allerdings bringe ich es einfach nicht richtig hin. 
Ich hoffe ihr könnt mir helfen.


----------



## mihe7 (27. Dez 2018)

Ein paar Dinge:

Du brauchst keine Screenshots vom Code zu machen, den kannst Du hier direkt reinkopieren, indem Du ihn zwischen Code-Tags setzt: [code=Java]Dein Code[/code] - das erhöht auch die Wahrscheinlichkeit, dass ihn sich jemand ansieht.
Typbezeichner (Klassennamen etc.) schreibt man in Java in UpperCamelCase, von Methoden, Parametern, Variablen in lowerCamelCase.
Das Design der Anwendung ist schlecht (hast Du das zufällig aus einem Youtube-Tutorial?) Sorg dafür, dass Dein Programm ohne "static" auskommt - mit Ausnahme der main-Methode.
Trenne Logik und UI. Du kannst den Kern des Spiels völlig ohne UI-Klassen schreiben. Die Oberfläche setzt Du dann einfach darüber.


----------



## Javinner (27. Dez 2018)

mihe7 hat gesagt.:


> hast Du das zufällig aus einem Youtube-Tutorial?


Das wird so stimmen  Diesen Style habe ich schon öfters mal gesehen:
Var. Variable. Variablen. V., da gibt es sicher ein paar mehr. Und ich habe das Gefühl, die stammen alle aus einer Quelle, weil eben der Code vom "Tutorial" zu "Tutorial" beinahe an jeder Stelle gleich ist. Diese Pest verbreitet sich wie Lauffeuer und auch hier sieht man es hin und wieder mal, wie eben gerade auch. 

@Tim Oberdammer 
Vergiss dieses Tutorial, das ist einfach nur Mist! Schnappe dir ein oder zwei gute Bücher und arbeite dich durch die Grundlagen durch. Das wird wesentlich effektiver sein, als das, was du gerade machst.


----------



## Robat (27. Dez 2018)

Das bestätigt im übrigen meine Vermutung, die ich schon in deinem anderen Thread hatte. Du fängst, so scheint es zumindest, den Code mehr oder minder wild zu kopieren, ohne wirklich zu wissen was er eigentlich tut. 
Abgesehen von den anderen Vorschlägen oben, sich ein anderes Tutorial zu suchen, solltest du wirklich erst die Grundlagen lernen. Dazu gehört zB, dass man eben nicht versucht eine Methode in einer anderen Methode zu überschreiben. 
(nicht böse gemeint sondern eher als gut gemeinter Rat)


----------



## Tim Oberdammer (28. Dez 2018)

1.) Meine Bücher sind bereits bestellt die kommen allerdings erst in ein paar Tagen.
2.) Bis dorthin wollte ich einfach selber ein bisschen etwas ausprobieren.
3.) Der Code ist nicht aus irgendwelchen Tutorial von Youtube da ich davon selbst nichts halte der Code ist von Java Online Seiten allerdings verstehe ich im Gegensatz zu eurer Meinung sehr wohl was hierbei passiert jedoch kenne ich einfach die Befehle nicht und bräuchte deshalb Hilfe.
4.) Wenn mir noch jemand bei meinen Problem ein Image zu bewegen helfen könnte wäre ich ihm sehr dankbar.
Mit Freundlichen Grüßen Tim


----------



## Robat (28. Dez 2018)

Also das grundsätzlich solltest du "Zeichnen" und "Bewegen" als 2 verschiedene Sache betrachten. Das "Zeichen" hast du bereits _gelernt_, nämlich in der `paintComponent(Graphics)` Methode. Jetzt darfst du das Bild nicht immer an gleicher Position zeichen - also führst du 2 Variablen (zB x,y) für das Bild ein, welche die aktuelle Position des Bildes beschreiben. [hast du bereits]
Diese Variablen (oder nur eine von beiden (?) ) müssen im Timer jeweils inkrementiert (hochgezählt) werden. Nach dem hochzählen rufst du auf der Komponente, wo die Bilder gezeichnet werden, die `repaint()` Methode auf, damit die Bilder erneut, an der aktualisierten Koordinate, gezeichnet werden.

Wenn du es ganz gut machen willst, packst du das Bild und die Koordinaten in eine eigene Klasse ... dann brauchst du diese komische Var Klasse nicht mehr. static Variablen solltest du sowieso kaum bis nie (gerade am Anfang) benutzen .. das braucht man zu 99% nicht und zeugt von schlechtem Design. static hat eben nichts mit OOP zu tun .. und Java ist nun mal OOP.


----------



## mihe7 (28. Dez 2018)

@Tim Oberdammer zu Deinen Punkten:
1. Gut.
2. OK
3. Warum ich die Frage nach den YouTube-Tutorials gestellt habe, hat @Javinner ja schon erklärt. Wo auch immer Du den Code her hast: ab in die Tonne. 



Tim Oberdammer hat gesagt.:


> allerdings verstehe ich im Gegensatz zu eurer Meinung sehr wohl was hierbei passiert


Der Versuch, eine Methode in einer anderen Methode einer anderen Klasse zu überschreiben oder die Tatsache, außerhalb des EDT Veränderungen am UI vornehmen zu wollen, sprechen jetzt nicht gerade dafür.

4. Hat @Robat schon beantwortet.


----------

