Wenn ich nach über 3 Monaten Javalernen immer noch nicht hinbekomme paint() in einem JFrame aufzunehmen und nicht weiss wie ich den ActionListener richtig einbaue, soll ich dann beser aufgeben und mit gamecreator anfangen, weil ich zu dumm bin um das zu verstehen ?
Habe schon ein 2. Javabuch (für Kids) gekauft, was mir nicht wirklich weitergeholfen hat (bin aber auch noch nicht ganz durch).
Programmieren ist nunmal ein komplexes Thema.. aber ich glaube es hilft auch nicht, ständig neue Beispiele zu suchen.
Bei all deinen Fragen in diesem Thread handelt es sich um Verständnisfragen zu grundsätzlichen Kontrukten (Klassen, Vererbung, Überschreiben/Überladen etc).
Wenn du also auf ein Problem stößt, weil du ein Thema noch nicht durchdrungen hast, dann solltest du da einfach dranbleiben und dich einlesen.
Gerade der Punkt mit dem Ein- bzw. Nachlesen ist unheimlich wichtig.
Ich denke die wenigsten hier (mich eingeschlossen) sind Vollzeit Java-GUI-Entwickler mit AWT oder Swing.
Zumindest ich für meinen Teil mache, um dir bei deinen Problemen zu helfen, genau das, was ich dir ans Herz lege.. ich suche, lese und probiere aus.
Die Erfahrung bzw. das erlangte Wissen sorgt schlussendlich dafür, dass du später immer seltener nachlesen musst bzw. gezielter nach der Lösung eines Problems suchen kannst.
Bis dahin dauert etwas jedoch etwas.
Nun zu deinem Problem:
Auch hier wieder mehrere Punkte.
Wie schon erwähnt, wird die paintComponent-Methode nirgendwo aufgerufen (das ist das, wofür bei deinem letzten Problem der Timer gesorgt hat).
Des Weiteren ist deine paintComponent-Methode nicht das, was du vermutlich erwartest.
Bei deinem letzten Problem hast du mit "any extends JPanel" deine Klasse "any" (man schreibt Klassen in Java übrigens groß) zu einem JPanel gemacht, da sie von diesem geerbt hat.
Die Klasse "JPanel" verfügt bereits über eine paintComponents-Methode. Diese hast du jedoch überschrieben, also sie quasi mit deiner Implementierung ersetzt.
In Java gibt es (seit Version 5) Annotationen.
Die sind ein Thema für sich, sind aber auf alle Fälle recht mächtig und verdammt nützlich.
So gibt es zum Beispiel auch die Annotation "@Override" (die du übrigens in deinem letzten Beispiel bei der actionPerformed-Methode selbst benutzt, da du dort diese Methode vom ActionListener überschreibst)
Die hat absolut keinen Einfluss auf das Überschreiben als solches, gibt deiner IDE jedoch einen Hinweis. Du machst ihr (und auch anderen Programmierern oder dir selbst, wenn du den Code nach ein paar Monaten mal wieder anschaust) damit klar, dass du beabsichtigst diese Methode zu überschreiben.
Wenn ich bei mir also die @Override-Annotation über die paintComponent-Methode setze, dann zeigt mir meine IDE den Fehler "The method paintComponent(Graphics) of type Test must override or implement a supertype method" an.
Es gibt also gar keine "supertype method" (also eine Methode einer in der Vererbungshierarchi übergeordneten Klasse), die du damit überschreiben kannst.
Und tatsächlich: Deine Klasse "Test" erbt von nichts (stimmt nicht ganz.. implizit erben in Java alle Klassen von Object).
Das heißt deine paintComponent-Methode heißt zufällig gleich und nimmt ebenfalls ein Graphics-Objekt entgegen, hat aber mit der gleichnamigen Methode einer JComponent nichts zu tun.
Nun könntest du sie von JFrame oder JPanel erben lassen, bräuchtest dann jedoch wieder etwas, dass das Malen anstößt.. nimmst du hierfür einen Timer wärst du quasi wieder beim gleichen Stand wie beim letzten mal.
Ich weiß, man möchte immer ganz schnell was sehen und freut sich tierisch, wenn sich das Viereck das erste mal bewegt.. aber allein durch copy&paste von unterschiedlichen Quellen lernst du nichts.
Mit etwas Glück stößt du mal auf ein Codeschnipsel, der nach copy&paste tatsächlich funktioniert, aber wirklich verstanden hast du es dann ja immer noch nicht.
Java hat mit den
javadocs (solltest du Java in einer anderen Version nutzen, dann ändere in der URL einfach die "8") umfangreiche Dokumentationen, die sogar in der IDE selbst verfügbar sind und teilweise den Umfang ganzer Tutorials haben.
Konntest du dein letztes Problem eigtl. lösen?