谁告诉你repaint()就会调paintComponent()方法?请看JComponent的源码: public void repaint(long tm, int x, int y, int width, int height) { RepaintManager.currentManager(this).addDirtyRegion(this, x, y, width, height); } 仅仅是在RepaintManager中设置需要重画的Dirty Region,至于什么时候重画,同RepaintManager决定,所以往往是同一线程多次调用repaint只会产生一次重画调用, 建议用父面板的 UpdateUI() 之类的调用试试,或者再开专门动画绘制的一个线程
public void repaint(long tm, int x, int y, int width, int height) {
RepaintManager.currentManager(this).addDirtyRegion(this, x, y, width, height);
}
仅仅是在RepaintManager中设置需要重画的Dirty Region,至于什么时候重画,同RepaintManager决定,所以往往是同一线程多次调用repaint只会产生一次重画调用,
建议用父面板的 UpdateUI() 之类的调用试试,或者再开专门动画绘制的一个线程
你可以在go()方法里做一个循环,循环四次,每一次都调用一次repaint()方法,同时每一次睡上一小段时间,同时要让paint()方法自己本身循环显示4张图片。
而paint()方法就走了一次 只输出了一个System.out.println("g方法执行");
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;public class MyFrame extends JPanel { Random random=new Random();
Image imge;
int rand;
JFrame jf = new JFrame();
public MyFrame(){
jf.add(this);
jf.setSize(300,400);
jf.setVisible(true);
}
public void go() { // private Image image[]=new Image[4];
String[] filename = { "c:\\01.JPG",
"c:\\02.JPG",
"c:\\03.JPG",
"c:\\04.JPG"};
ImageIcon[] images = new ImageIcon[10]; MediaTracker tracker = new MediaTracker(this);
for (int i = 0; i < 4; i++) {
System.out.println("够着方法");
rand=(int)random.nextInt(4);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
images[i] = new ImageIcon(filename[rand]);
imge = images[i].getImage(); tracker.addImage(imge, i); try {
tracker.waitForID(1); } catch (InterruptedException exception) { }
repaint();
}
}
public void paint(Graphics g) {
System.out.println("paint");
}
public static void main(String[] args) {
new MyFrame().go();
}
}
建议你在ImagePanel的构造方法里加一句,this.setVisible(true);试一下。
调用了repaint()方法但没有调用paint()方法的原因是这个panel还没被draw出来。
Graphics g = getGraphics();
paint(g);
就OK了