watki + grafik = problem

0

mam do napisania program z watkami, ktory symuluje ruch po okrągu. moj program polega na tym, że zamiast "rysowac" ruch kulki po okregu, program rysuje okrag :/ ktoś mógłby pomóc?
klasa Koral

import java.awt.geom.*;

public class Koral 
{
	private double x=50;
	private double y=50;
	private static final int SIZE=5;
	
	double r_r=100;
	
	double sr_x=225;
	double sr_y=125;
	
	double h;
	double a;
		
	public void ruchPoOkgregu(double kat)
	{			
			h=r_r*Math.sin(kat); 
			y=sr_y+h;
			a=r_r*Math.cos(kat); 
			x=sr_x+a;
	}
	
	public Ellipse2D getKsztalt()
	{		
		return new Ellipse2D.Double(x, y, SIZE, SIZE);
	}
}

klasa KoralComponent

import javax.swing.*;
import java.util.*;
import java.awt.*;

public class KoralComponent extends JPanel
{
	private ArrayList <Koral> koraliki = new ArrayList<Koral>();
	
	public void add(Koral k)
	{
		koraliki.add(k);
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponents(g);
		Graphics2D g2= (Graphics2D) g;
		for(Koral k : koraliki)
		{
			g2.fill(k.getKsztalt());
		}
	}
}

klasa KoralWatek

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class KoralWatki 
{
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				JFrame frame = new KoralFrame();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
			}
		});
	}

}

class KoralRunnable implements Runnable
{
	private Koral koral;
	private Component component;
	public static final int POWTORZ=1000;
	public static final int OPOZNIENIE=3;
	
	public KoralRunnable(Koral kkor, Component kcomp)
	{
		koral=kkor;
		component=kcomp;
	}
	
	public void run()
	{
		double i=0;
		try
		{
			for ( i=0; ;i=i+0.001)
			{
				koral.ruchPoOkgregu(i); 
				component.repaint();
				component.repaint();
				Thread.sleep(OPOZNIENIE);
			}
		}
		catch (InterruptedException e){}
	}
}


class KoralFrame extends JFrame implements ActionListener
{
	private KoralComponent comp;
	
	public static final int OPOZNIENIE=5;
	
	JButton dodaj = new JButton("Start");
	JButton zamknij = new JButton("Zamknij"); 
	
	public KoralFrame()
	{
		setSize(450,350);
		setTitle("Watki-Korale");
		comp=new KoralComponent();
		add(comp, BorderLayout.CENTER);
		
		JPanel buttonPanel = new JPanel();
		
		
		buttonPanel.add(dodaj);
		
		buttonPanel.add(zamknij);
		
		buttonPanel.setFocusable(true);
		
		add(buttonPanel, BorderLayout.SOUTH);
		
		dodaj.addActionListener(this);
		zamknij.addActionListener(this);
		
	}
	
	public void addKoral()
	{
		Koral k = new Koral();
		comp.add(k);
		Runnable r = new KoralRunnable(k, comp);
		Thread t = new Thread(r);
		t.start();
	}

	
	public void actionPerformed(ActionEvent evt) 
	{
		Object zrodlo = evt.getSource();	
		
        if (zrodlo==dodaj) addKoral();
		
		if (zrodlo==zamknij) System.exit(0);
	}
}
0

i w sumie jeszcze jedno pytanie jak moglbym synchronizowac ten program aby dodawane koraliki sie nie wyprzedzały?

1 użytkowników online, w tym zalogowanych: 0, gości: 1