Hi,
Ich will eine Animation (erst mal eine recht einfache) in meinem Programm haben. Die soll aber nur ein Element von mehreren sein.
So soll sie in einem Tab-Sheet neben einigen Buttons liegen.
Daher habe ich die Animation in einer eigenen Klasse geschrieben, die ich von JPanel abgeleitet habe und die dann dem JPanel, dass die Tab-Seite anzeigt hinzugefügt.
In dem Moment, wo ich jetzt aber die Animation starte, kommt es zu komischen Graphikefekten, da er die Buttons, die in dem JPanel um die Animation herum angeordnet sind noch einmal in der Animation darstellt.
Könnt ihr mir sagen wo da mein Fehler liegt?? Oder hab ich da nen groben Fehler und kann das mit dem JPanel so gar net machen??
Hier mal der Animationscode:
Schon mal Danke für jede Hilfe!
Ich will eine Animation (erst mal eine recht einfache) in meinem Programm haben. Die soll aber nur ein Element von mehreren sein.
So soll sie in einem Tab-Sheet neben einigen Buttons liegen.
Daher habe ich die Animation in einer eigenen Klasse geschrieben, die ich von JPanel abgeleitet habe und die dann dem JPanel, dass die Tab-Seite anzeigt hinzugefügt.
In dem Moment, wo ich jetzt aber die Animation starte, kommt es zu komischen Graphikefekten, da er die Buttons, die in dem JPanel um die Animation herum angeordnet sind noch einmal in der Animation darstellt.
Könnt ihr mir sagen wo da mein Fehler liegt?? Oder hab ich da nen groben Fehler und kann das mit dem JPanel so gar net machen??
Hier mal der Animationscode:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JPanel;
public class AnimationPanel extends JPanel implements Runnable {
JPanel parent;
Thread animator;
int delay;
int frame;
AnimationPanel(JPanel _parent)
{
super();
parent = _parent;
frame = 0;
}
public void init()
{
delay = 100;
}
public void start()
{
animator = new Thread(this);
animator.start();
}
public void stop()
{
animator = null;
}
public void run()
{
while (Thread.currentThread() == animator)
{
// Display the next frame of animation.
this.repaint();
// Delay for a while
try
{
Thread.sleep(delay);
}
catch (InterruptedException e)
{
break;
}
frame++;
}
}
public void paint(Graphics g)
{
if (frame >= 100)
frame = 0;
Graphics2D g2d = (Graphics2D)g;
if (frame <= 50)
g2d.draw(new Ellipse2D.Double(10,10,20,20));
else
g2d.fill(new Ellipse2D.Double(10,10,20,20));
}
}
Schon mal Danke für jede Hilfe!