Florian
03.04.2006, 12:25
Guten Morgen!
Seit gestern Abend versuche ich eine Animation mit einem Thread auf den Bildschirm zu zaubern, aber irgendwie wird die repaint-Methode nicht mehr ausgeführt, der Thread läuft aber vernünftig durch, wie mir println() zeigt!
Hier der Code:
1. Test_main.java -> Hauptklasse
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test_main
{
public Test_main()
{
}
public static void main(String[] args)
{
Test_under frame = new Test_under("Test");
}
}
2. Test_under.java -> geerbtes JFrame -> von hier aus wird der Thread gestartet
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test_under extends JFrame
{
public Test_under(String title)
{
super(title);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
});
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int frameWidth = 250;
int frameHeight = 250;
setBounds(((d.width / 2) - (frameWidth / 2)) , ((d.height / 2) - (frameHeight / 2)) , frameWidth , frameHeight);
Container cp = getContentPane();
cp.setLayout(null);
Test_panel panel = new Test_panel();
cp.add(panel);
setResizable(false);
setVisible(true);
Test_panel.startIntro();
}
}
3. Test_panel.java -> geerbtes JPanel -> hier ist der Thread mit der repaint()-Funktion
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test_panel extends JPanel implements Runnable
{
int x = 0;
int y = 0;
public Test_panel()
{
setBounds(0 , 0 , 244 , 218);
setBackground(Color.WHITE);
setVisible(true);
}
public static void startIntro()
{
Thread intro = new Thread(new Test_panel());
intro.start();
}
public void run()
{
for(int i = 0 ; i <= 100 ; i++)
{
x = i;
y = (i / 2);
repaint();
System.out.println(i);
try
{
Thread.sleep(100);
}
catch (InterruptedException e){}
}
}
public void paint(Graphics g)
{
super.paint(g);
g.drawRect(((244 / 2) - (x / 2)) , ((218 / 2) - (y / 2)) , x , y);
}
}
Vielleicht kann mir ja jemand weiterhelfen!?
Danke für eure Mühe!
Viele Grüße
Florian
Seit gestern Abend versuche ich eine Animation mit einem Thread auf den Bildschirm zu zaubern, aber irgendwie wird die repaint-Methode nicht mehr ausgeführt, der Thread läuft aber vernünftig durch, wie mir println() zeigt!
Hier der Code:
1. Test_main.java -> Hauptklasse
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test_main
{
public Test_main()
{
}
public static void main(String[] args)
{
Test_under frame = new Test_under("Test");
}
}
2. Test_under.java -> geerbtes JFrame -> von hier aus wird der Thread gestartet
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test_under extends JFrame
{
public Test_under(String title)
{
super(title);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
});
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int frameWidth = 250;
int frameHeight = 250;
setBounds(((d.width / 2) - (frameWidth / 2)) , ((d.height / 2) - (frameHeight / 2)) , frameWidth , frameHeight);
Container cp = getContentPane();
cp.setLayout(null);
Test_panel panel = new Test_panel();
cp.add(panel);
setResizable(false);
setVisible(true);
Test_panel.startIntro();
}
}
3. Test_panel.java -> geerbtes JPanel -> hier ist der Thread mit der repaint()-Funktion
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test_panel extends JPanel implements Runnable
{
int x = 0;
int y = 0;
public Test_panel()
{
setBounds(0 , 0 , 244 , 218);
setBackground(Color.WHITE);
setVisible(true);
}
public static void startIntro()
{
Thread intro = new Thread(new Test_panel());
intro.start();
}
public void run()
{
for(int i = 0 ; i <= 100 ; i++)
{
x = i;
y = (i / 2);
repaint();
System.out.println(i);
try
{
Thread.sleep(100);
}
catch (InterruptedException e){}
}
}
public void paint(Graphics g)
{
super.paint(g);
g.drawRect(((244 / 2) - (x / 2)) , ((218 / 2) - (y / 2)) , x , y);
}
}
Vielleicht kann mir ja jemand weiterhelfen!?
Danke für eure Mühe!
Viele Grüße
Florian