Ruchoma animacja

0

Witam,
Muszę zrobić spadającą kulkę w Javie i ma to działać na wątkach. Jednak to co udało mi się napisać działa w tle ale nic mi nie wyświetla.

Ogólnie mam JPanel a w nim wywołuję poniższą klasę:

public class TObiekt extends Thread {
   int DefaultSizeHeight = 300;

   public void Rysuj(int intY,Graphics x)
   {
      x.setColor(Color.red);
      x.fillOval(10, intY, 10, 10);
   }

   public void run(Graphics x)
   {
      while(true)
      {
         for(int intY = -10;intY<DefaultSizeHeight+10;intY++)
         {
            this.Rysuj(intY,x);
         }
      }
   }
}

a wywołuję to tak w JPanel:

public void paintComponent(Graphics x)
   {
      Graphics2D x2d =(Graphics2D) x;
      
      TObiekt obiekt = new TObiekt();
      obiekt.run(x);
   }

Co robię źle że mi tego nie wyświetla? Co muszę zmienić? Proszę o pomoc.

Pozdrawiam,
Łukasz

0

Dosyć dużo tu błędów, więc nie będę się zagłebiać w treść, tylko napiszę jak mógłbyś to zrobić.

Na początek tworzysz sobie klasę, która dziedziczy po JComponent. Dzięki temu będziesz mógł ją później od razu dodać do JPanel'u. Klasa rozszerza też interfejs Runnable, co da możliwość "opakowania" jej w wątek.
Do głównej pętli dodajesz linijkę, która będzie na chwilę usypiać piłeczkę, spowalniając też jej ruch.

public class BallComponent extends JComponent implements Runnable {

	public static final int defaultHeight = 300;

	private int  y;

	public void paintComponent(Graphics g) {
	    g.setColor(Color.RED);
	    g.fillOval(10, y, 10, 10);
	}
	public void run() {
	    while(true){
	        for(y = -10; y < defaultHeight+10; y++) {
	            repaint();
	            try { Thread.sleep(10); } catch (InterruptedException IE) { return; }
	        }
	    }
	}
}

Teraz wystarczy jeszcze dodać to do panelu:

setSize(30, BallComponent.defaultHeight);
BallComponent ball = new BallComponent();
add(ball);
new Thread(ball).start();

I to wszystko. Mam nadzieję, że pomogłem :)
Pozdrawiam, Towe

P.S. Nawiązując do tematu - czy animacja może być nieruchoma? ;-P

0

Coś metoda paintComponent w klasie BallComponent nie działa. Kulka się nie wyświetla a jak dodałem do tej metody System.out.println('aaa'); to mi nic nie wyrzuca.

0
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;
import javax.swing.JComponent;

public class Test74_przyklad extends JApplet {  
  @Override public void start(){      
    setSize(30, BallComponent.defaultHeight);
    BallComponent ball = new BallComponent();
    this.add(ball);
    new Thread(ball).start();
  }
}

class BallComponent extends JComponent implements Runnable {
        public static final int defaultHeight = 300;
        private int  y;
        public void paintComponent(Graphics g) {
            g.setColor(Color.RED);
            g.fillOval(10, y, 10, 10);
        }
        public void run() {
            while(true){
                for(y = -10; y < defaultHeight+10; y++) {
                    repaint();
                    try { Thread.sleep(10); } catch (InterruptedException IE) { return; }
                }
            }
        }
}

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