Erste Schritte Kreis animieren

Pio

Mitglied
Hallo zusammen,

ich möchte einen Kreis animieren, der immer größer wird. Soweit läuft auch alles wie es soll. Da ich aber sehr unerfahren bin, wollte ich mir eine kurze Rückmeldung von erfahrenen Usern einhohlen. Könnte man was verbessern, oder ist was falsch gelaufen? Kritik gern mit kurzer Erklärung, damit man es sich anlesen kann. Bei Fragen, fragen! Danke!

Jetzt zur Erklärung, wie ich es mir gedacht habe:
Ich habe für die Position des Kreises Klassenvariablen benutzt (Int x und y), da ich sonst nicht die Position des Kreises in der Klasse kreis aufrufen kann. In kreisGui wird die Fenstergröße gesetzt und die Position des Kreises ermittelt (Var. X und y).

Für die Veränderungen habe ich die Klasse kreis erstellt. Im Konstruktor setzte ich den Timer, breite und hoehe für den Kreis (Größe des Kreises) und starte den Timer. Der Timer startet den TimerListener, der als erstes die Methode kreisAendern() aufruft. Hier werden die Variablen x, y, breite und hoehe geändert.

Durch die if-Verzweigung kontrolliere ich den Stop des Timers. Dies kontrolliere ich durch die Variable zaehler. Wenn diese Variable 150 (das sind die Durchgänge, wie oft der Kreis neu gezeichnet wird) erreicht hat, wird der timer gestopt.

Code:
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class kreisGui extends JFrame

{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
   
    int x, y;

    public kreisGui(String titel)
    {
        super(titel);
       
        add(new kreis());
       
        setSize(400, 400);
       
        x = (getSize().width / 2) - 5;
        y = (getSize().height / 2) - 5;
       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
   
    public class kreis extends JPanel
    {
        /**
         *
         */
        private static final long serialVersionUID = 1L;
       
        int breite, hoehe;
        Timer timer;
        int zaehler;
       
       
        //die überschriebene Methode paintComponent()
        @Override
        protected void paintComponent(Graphics g)
       
        {
            //die Methode der übergeordnete Klasse aufrufen
            super.paintComponent(g);
           
            g.drawOval(x, y, breite, hoehe);
           
        }
       
        public kreis()
        {
           
            timer = new Timer(20, new TimerListener());
                       
            breite = 10;
            hoehe = 10;
           
            zaehler = 0;

            timer.start();
        }
       
        public void kreisAendern()
        {
           
            x = x -1;
            y = y - 1;
           
            breite = breite +2;
            hoehe  = hoehe + 2;
           
            if(zaehler == 150)
            {
                timer.stop();
            }
            System.out.println("X Y " + x + " " + y + " || " + breite + " " + hoehe + " zaehler " + zaehler);
            zaehler++;
        }

        class TimerListener implements ActionListener
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                kreisAendern();
                repaint();
            }
           
        }
    }
}
 

Robat

Top Contributor
Grundsätzlich spricht mMn. nichts gegen deinen Weg.

3 Dinge, die ich dir mitgeben möchte:

- Gewöhn dir ab von JFrame zu erben wenn du es nicht brauchst. Du musst immer nur dann von einer Klasse erben, wenn du deren Funktionalität erweitern willst. In deinem Fall reicht es aber ein Objekt von JFrame zu erstellen und darüber dein Fenster aufzubauen. Wie du sicherlich weißt kann man nur von einer Klasse erben weshalb du dir gut überlegen solltest von welcher Klasse du erbst :)

- Java-Konvention "schreiben es vor", dass Klassenanmen in UpperCammelCase und der Rest in lowerCammelCase geschrieben werden. Wenn man sich an die Konventionen hält ist es einfacher für andere Programmierer dein Code zu lesen - es ist aber natürlich kein Muss :)

- Ich bin kein Freund von inneren Klasse da es die Sache mMn unübersichtlicher macht. Ich weiß aber das es - auch in diesem Forum - Leute gibt die mir da widersprechen weshalb ich die Sache jetzt nicht weiter ankreiden werde. Es ist sicherlich Geschmackssache. Es gibt natürlich auch Stellen wo innere Klassen die Sache vereinfachen :)

Gruß Robert
 

Pio

Mitglied
Hallo Robert,

dank dir für deine Antwort. Ich habe einiges nachgelesen und mir zu Herzen genommen. Insbesondere dein erster Hinweis, den ich auch (aus meiner Sicht) erfolgreich umsetzen konnte. Die Java-Konventionen sind mir bekannt und von mir vernachlässigt (nicht mit Absicht) worden. Aber auch das habe ich korrigiert. Zu den inneren Klassen: Ich selbst habe es so angelernt / beigebracht bekommen. Ob sinnvoll ist ..... wie du schon sagst -> ist Geschmackssache. Für ein Urteil hab ich, als blutiger Anfänger, zu wenig Erfahrung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
C Kleinsten Kreis einer Punktmenge bestimmen Java Basics - Anfänger-Themen 4
CptK Interface Kleine Kreise in großem Kreis anordnen Java Basics - Anfänger-Themen 3
Y Kreis auf einer Kreisbahn bewegen Java Basics - Anfänger-Themen 5
A Kreisumfang/-Fläche vom Kreis berechnen Java Basics - Anfänger-Themen 39
H Kreis verschieben Java Basics - Anfänger-Themen 10
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
X Kreis/Linie Programmieren Java Basics - Anfänger-Themen 1
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
L Dreieck Kreis Java Basics - Anfänger-Themen 12
A Kreis,Radius Programm Java Basics - Anfänger-Themen 3
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
A wie Kreis mit Schleife versetzten? Java Basics - Anfänger-Themen 25
O Punkte auf einem Kreis "wandern" lassen Java Basics - Anfänger-Themen 3
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
D Kreis mit Pfeiltaste bewegen Java Basics - Anfänger-Themen 3
K Bild auf Kreis packen Java Basics - Anfänger-Themen 2
E Kreis erstellen Java Basics - Anfänger-Themen 10
B Einen Kreis erzeugen Java Basics - Anfänger-Themen 3
S Erzeuge einen Kreis Java Basics - Anfänger-Themen 16
B Kreis,Punkt,Zylinder Java Basics - Anfänger-Themen 6
D Punktberechnung im Kreis Java Basics - Anfänger-Themen 15
TheKing Bild nur in Kreis sichtbar machen Java Basics - Anfänger-Themen 6
K Kreis mit neuer Position zeichnen Java Basics - Anfänger-Themen 3
M Umfang von Rechteck oder Kreis anhand der Parameter Java Basics - Anfänger-Themen 2
L Klickbarer Bereich in einem Kreis Java Basics - Anfänger-Themen 13
D kreis gelb gefüllt aber schwarzer rand. Java Basics - Anfänger-Themen 2
K Kreis Zeichnen ? Code Richtig aber keine Zeichung Java Basics - Anfänger-Themen 8
L Kreis der sich bewegt Java Basics - Anfänger-Themen 11
G Kreis auf JComponent zeichnen Java Basics - Anfänger-Themen 8
0 Klasse Kreis Java Basics - Anfänger-Themen 4
P Java-Applet, Kreis zeichnen Java Basics - Anfänger-Themen 4
E Kreis in Frame ,den man mit der Maus versetzen kann? Java Basics - Anfänger-Themen 2
7 Kreis zeichnen Java Basics - Anfänger-Themen 4
J Kreis herumfliegen & abprallen von Rändern Java Basics - Anfänger-Themen 7
G contains - Punkt in Kreis enthalten? Java Basics - Anfänger-Themen 6
A Kreis mit gedrückter Maustaste bewegen. Java Basics - Anfänger-Themen 2
S Thread - Kugel im Kreis hin-und herflitzen lassen Java Basics - Anfänger-Themen 3
J Hilfe beim Label animieren Java Basics - Anfänger-Themen 1
B Satellitenbahn animieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben