Painting in swing. repaint doesn't work.
Hi, today I hve a problem with painting. I created a class Szescian
that extends JPanel and implements Runnable. I want that class to
paint a square that moves. I move it using a thread. The problem is
that when i use repaint in the thread the screen doesn't repaints( the
compiler doesn't jump tu paintComponent(gDC) method) Here is how i
create this object in the class with frame
private Szecian s1;
//COnstructor
public Main(){
.........
s1 = new Szescian();
s1.setLocation(0,0);
s1.setOpaque(true);
s1.setVisible(true);
s1.setSize(panelSzescian.getSize());;
s1.setOpaque(true);
panelSzescian.add(s1); // a JPanel to which i add s1
s1.uruchom(); //start the thread
.........
}
and here is my Szescian class:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import javax.imageio.*;
public class Szescian extends JPanel implements Runnable{
public int x,y;
public Rectangle rect;
public Szescian(){
x=0; y=0;
rect = new Rectangle(0,0,getWidth(), getHeight());
}
public void run(){
for(int i=0; i<50; i++)
{
x=i; y=i;
System.out.println(i);
try
{
Thread.sleep(100);
}
catch(InterruptedException e){e.printStackTrace();}
// repaint(rect);
repaint();
}
}
protected void paintComponent(Graphics gDC)
{
// podwojne buforowanie
super.paintComponent( gDC );
Image img = createImage(getWidth(), getHeight());
Graphics g = img.getGraphics();
g.setColor(Color.yellow);
g.drawRect(x,y,20,20);
g.fillRect(x,y,20,20);
//gDC.drawImage(img,0,0,getWidth(), getHeight(),this);//
wyswietla obraz z bufora
gDC.drawImage(img,0,0,this);
}
protected void paintBorder(){
}
protected void paintChildren(){
}
public void uruchom(){
Runnable r = new Szescian();
Thread t = new Thread(r);
t.start();
}
}