在网上搜JPanel加载图片一般都是testPane = new JPanel(){  
public void paintComponent(Graphics g) {
ImageIcon icon = new ImageIcon(filePath);
// 图片随窗体大小而变化
 g.drawImage(icon.getImage(), 0, 0, 240,270,this);
}
            };
但是对于多个图片,假设是个JPanel的数组,用这个办法就会得到重复的图片了,因为在每次testPane[k] = new JPanel(){
........};的时候,paintComponent(Graphics g)根本没有被调用,要等全部都声明完了才调用,这时filePath就变成循环中的最后那个值,整个JPanel所加载的图片都是一样的了不知道有没有在外部调用的函数,让我每次声明完数组的一项如testPane[k]之后,马上调用paintComponent(Graphics g),而不是等到数组的所有项都声明完才调用这个函数?
下面附上代码:labelA :   for(int i=1;i<=(numOfScanDoc/4+1);i++){//图片数量
for(int j=1;j<=4;j++){
   k = (i-1)*4+j;
if(k>numOfScanDoc){
   break labelA;
        }
    filePath = "E:\\TeleArchive\\"+k+".jpg";
    testPane[k] = new JPanel(){  
public void paintComponent(Graphics g) {
   ImageIcon icon = new ImageIcon(filePath);
// 图片随窗体大小而变化
            g.drawImage(icon.getImage(), 0, 0, 240,270,this);
}
            };结果是所有 testPane[k]的图片都是最后一幅图 

解决方案 »

  1.   

    我搞了一下,不知道是不是你要解决的.
    package org.dbcc.ztest;import java.awt.*;import javax.swing.*;import org.dbcc.util.ResourceUtil;
    import org.dbcc.ztest.JTestPanel;public class testPanel {

    private static final Image normalImg=ResourceUtil.FASHION_BUTTON_NORMAL_IMAGE;
    private static final Image activeImg=ResourceUtil.FASHION_BUTTON_ACTIVE_IMAGE;
    private static final Image[] imageArray=new Image[]{normalImg,activeImg};

    private JFrame f = new JFrame("测试");
    private Box horizontal = Box.createHorizontalBox();


    public void init(){

    for(int i=0;i<2;i++){
    horizontal.add(new JTestPanel(imageArray[i]));
    f.add(horizontal);
    }

    f.setSize(415,280);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public static void main(String[] args){
    new testPanel().init();
    }}
    package org.dbcc.ztest;import java.awt.*;import javax.swing.*;public class JTestPanel extends JPanel{

    protected Image image;

    public JTestPanel(Image image){

    super();
    this.image=image;


    }

    public void paintComponent(Graphics g)
      {
        super.paintComponent(g);     if (this.image != null)
          g.drawImage(this.image, 0, 0, getWidth(), getHeight(), 0, 0, 
            this.image.getWidth(null), this.image.getHeight(null), null);
      }}
      

  2.   

    漏了一个
    package org.dbcc.util;import java.awt.Image;import javax.swing.ImageIcon;public class ResourceUtil {

    public static final Image FASHION_BUTTON_NORMAL_IMAGE=new ImageIcon(ResourceUtil.class.getResource("/icon/fashionButton_Normmal.gif")).getImage();
    public static final Image FASHION_BUTTON_ACTIVE_IMAGE=new ImageIcon(ResourceUtil.class.getResource("/icon/fashionButton_Active.gif")).getImage();}
      

  3.   

    你的意思是自己写个JPanel的继承类,然后每次new 的时候就可以把Image传递给它的构造函数,然后就可以调用它的paintComponent();?哈哈,我明天试试,应该是可以的