在网上找到的关于repaint方法的介绍几乎都是出于一篇文章的....没有代码示例,其实还是对如何使用一知半解。
我现在想做一个逐帧显示的加载动画,但是使用了repaint之后并没有重绘....而是直接加载到了最后一张图片(一共15张,每一张命名都是Loadingn.jpg,n是一个整数)。请问大家这样写有什么问题?怎么解决这个问题?
LoadingPage.java
package com.company;
import javax.swing.*;
public class LoadingPage {
LoadingPage(int width, int height) {
//新建窗体
JFrame frame = new JFrame("加载中...");
//窗体初始化
frame.setSize(width, height);//设定窗体宽和高
frame.setLocationRelativeTo(null);//居中对齐
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//退出后关闭JVM
frame.setVisible(true);//设置为可见
//创建15张图模拟一个动画效果
ImageIcon[] loadingImages = new ImageIcon[15];
System.out.println("正在加载");
for (int i = 0; i < 15; i++) {
loadingImages[i] = new ImageIcon("res\\Loading\\Loading" + i + ".jpg");
}
drawLoadingAnimation drawLoadingAnimation = new drawLoadingAnimation(loadingImages);
frame.getContentPane().add(drawLoadingAnimation);
}
}
drawLoadingAnimation.java
package com.company;
import javax.swing.*;
import java.awt.*;
public class drawLoadingAnimation extends JPanel {
Image im;
drawLoadingAnimation(ImageIcon[] im){
this.setOpaque(true);
for(int i=0;i<im.length;i++){
this.im=im[i].getImage();
repaint(1000,0,0,this.getWidth(),this.getHeight());
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(im,0,0,this.getWidth(),this.getHeight(),null);
}
}