realtec
17-01-2004, 09:41
Hallo, ich habe folgendes Problem, ich will ein Programm erstellen, in dem 4 Rechtecke (Threads) sich ein Wettrennen abhalten. Wie kann ich das realisieren, im Moment bewegen sich alle Rechtecke gleich schnell....
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class AnimationPanel1 extends JPanel
{
private int x;
private int y = 10;
boolean right = true;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.fillRect(x, y, 50, 20);
g.fillRect(x, 40, 70, 20);
g.fillRect(x, 70, 50, 20);
g.fillRect(x, 100, 50, 20);
// g.drawOval(10, 50, 300, 300);
// g.fillArc(10, 50, 300, 300, 0, x);
}
public void next()
{
if(right)
{
x++;
if(x == 360)
right = false;
}
else
{
x--;
if(x == 0)
right = true;
}
repaint();
}
}
class Animator1 extends Thread
{
private AnimationPanel1 animPanel;
public Animator1(AnimationPanel1 animPanel)
{
this.animPanel = animPanel;
}
public synchronized void run()
{
while(true)
{
animPanel.next();
try
{
Thread.sleep(60);
}
catch(InterruptedException e) {}
}
}
}
class Animator2 extends Thread
{
private AnimationPanel1 animPanel;
public Animator2(AnimationPanel1 animPanel)
{
this.animPanel = animPanel;
}
public void run()
{
while(true)
{
animPanel.next();
try
{
Thread.sleep(180);
}
catch(InterruptedException e) {}
}
}
}
public class Wettrennen
{
public static void main(String argv[])
{
JFrame f = new JFrame("Animation");
AnimationPanel1 a = new AnimationPanel1();
f.getContentPane().add(a);
f.setLocation(100, 100);
f.setSize(450, 400);
f.setVisible(true);
Animator1 animThread = new Animator1(a);
Animator2 animThread1 = new Animator2(a);
animThread.start();
animThread1.start();
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class AnimationPanel1 extends JPanel
{
private int x;
private int y = 10;
boolean right = true;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.fillRect(x, y, 50, 20);
g.fillRect(x, 40, 70, 20);
g.fillRect(x, 70, 50, 20);
g.fillRect(x, 100, 50, 20);
// g.drawOval(10, 50, 300, 300);
// g.fillArc(10, 50, 300, 300, 0, x);
}
public void next()
{
if(right)
{
x++;
if(x == 360)
right = false;
}
else
{
x--;
if(x == 0)
right = true;
}
repaint();
}
}
class Animator1 extends Thread
{
private AnimationPanel1 animPanel;
public Animator1(AnimationPanel1 animPanel)
{
this.animPanel = animPanel;
}
public synchronized void run()
{
while(true)
{
animPanel.next();
try
{
Thread.sleep(60);
}
catch(InterruptedException e) {}
}
}
}
class Animator2 extends Thread
{
private AnimationPanel1 animPanel;
public Animator2(AnimationPanel1 animPanel)
{
this.animPanel = animPanel;
}
public void run()
{
while(true)
{
animPanel.next();
try
{
Thread.sleep(180);
}
catch(InterruptedException e) {}
}
}
}
public class Wettrennen
{
public static void main(String argv[])
{
JFrame f = new JFrame("Animation");
AnimationPanel1 a = new AnimationPanel1();
f.getContentPane().add(a);
f.setLocation(100, 100);
f.setSize(450, 400);
f.setVisible(true);
Animator1 animThread = new Animator1(a);
Animator2 animThread1 = new Animator2(a);
animThread.start();
animThread1.start();
}
}