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.
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();
}
}
}
}