(swing)用一个JPanel显示本地文件夹下多个图片的问题

现要用swing实现显示出制定文件夹下所有图片



利用 JButton 触发 在JPanel中显示某一文件夹下的所有图片文件,但是每一次点击JButton时显示的总是第一次输入文件夹目录后点击显示的那些图片(除非此后选择一图片更多的文件夹),总之前一个目录下的图片总是要盖住以后的。



请问是怎么回事?



public class first extends JFrame implements ActionListener {

        Image image;

        int new_w;

        int new_h;

        int framex=400;

        int framey=300;

        JPanel top = new JPanel();

        JPanel center = new JPanel();

        JTextField name = new JTextField(15);

        Container cp = new Container();

        public first() {

                super("perfect");

                setDefaultCloseOperation(EXIT_ON_CLOSE);

                init();

                setVisible(true);

        }

        public static void main(String[] args) {

                new first();

        }

        private void init() {

                JPanel top = new JPanel();

          top.add(new JLabel("File :"));

          top.add(name);

          JButton b = new JButton("Show");

          top.add(b);

          cp = getContentPane();

          cp.add(BorderLayout.NORTH, top);

         

          name.setText("C:\");

          setSize(new Dimension(framex, framey));

          b.addActionListener(this);

          }



       

        public void actionPerformed(ActionEvent e) {

       


         String pURL = "C:\";

        try {

        pURL = name.getDocument().getText(0, name.getDocument().getLength());

} catch (BadLocationException e1) {

e1.printStackTrace();

}

                                    //得到该制定文件夹下所有图片文件的名称

ArrayList<string> imga = imgFiles(pURL);

name.setText(pURL);

        image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");

        for(int dd = 0;dd<imga.size();dd++){ <br="">        }



        center = new Mypanel(pURL,imga);

                cp.add(BorderLayout.CENTER,center);

                center.validate();



                getContentPane().validate();

        }



}



class Mypanel extends javax.swing.JPanel {



private static final long serialVersionUID = 1L;

private Image image;

private Image[] images;

private ArrayList<string> name;



Mypanel() {

//this.image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");

}




Mypanel(String parentURL,ArrayList<string> imgarray){

name = imgarray;

images = new Image[imgarray.size()];

for(int i=0;i<imgarray.size();i++){ <br="">


System.out.println("imgs "+i+": "+imgarray.get(i));

if(imgarray.get(i)!=null){

images[i] = Toolkit.getDefaultToolkit().getImage(parentURL+"\"+imgarray.get(i));

System.out.println("URL::"+parentURL+"\"+imgarray.get(i));

}




}




}



public void paintComponent(Graphics g) {




System.out.println("################### Enter paintComponent : "+this.getToolTipText());

int x = 0;

int y = 0;

for(int i=0;i<images.length;i++){ <br=""> //imgs[i] = Toolkit.getDefaultToolkit().getImage("C:\"+);

//if(images[])

//this.paintComponent(g);

if(name.get(i)!=null){

if(x==0) x=20;

else if(x+90+80<400) x=x+90;

else {

x=20;

y=y+70;

}

System.out.println("@@@@@@@ x:"+x+",y:"+y+"  name = "+name.get(i)+" ");




g.drawImage(images[i], x, y,80,60, this);

}

}


}

}
问题补充:
firefly.li



不是因为没有刷新,



怀疑貌似是用了原来的JPanel对象,



可是从代码中找不出点儿头绪



请指点下吧
问题补充:
加上这些,代码就是全的了



import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Rectangle;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.util.ArrayList;



import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.text.BadLocationException;



谢谢!
问题补充:
package nimgs;



import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Rectangle;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.util.ArrayList;



import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.text.BadLocationException;

public class first extends JFrame implements ActionListener {

        Image image;

        int new_w;

        int new_h;

        int framex=400;

        int framey=700;

        //ssJButton hh = new JButton();

       

        JPanel top = new JPanel();

       

        JPanel center = new JPanel();

       

        JTextField name = new JTextField(15);

       

        Container cp = new Container();

 

     

        public first() {

                super("perfect");

                setDefaultCloseOperation(EXIT_ON_CLOSE);

                init();

                setVisible(true);

        }

        public static void main(String[] args) {

                new first();

        }

        private void init() {

                //hh.setBounds(new Rectangle(165, 225, 91, 37));

                //hh.setText("picture ");

                JPanel top = new JPanel();

          top.add(new JLabel("File :"));

          top.add(name);

          JButton b = new JButton("Show");

          top.add(b);

          //b.addActionListener(nameListener);

         

         

          if(center!=null)

  cp.remove(center);

          cp = getContentPane();

          cp.add(BorderLayout.NORTH, top);

         



         

          //cp.add(BorderLayout.CENTER,center);

          //cp.add(new JScrollPane());

         

          name.setText("C:\");

          System.out.println("init before ActionListioned!!!!!!!!!!!!!!");

          b.addActionListener(this);

          System.out.println("init after  ActionListioned!!!!!!!!!!!!!!");

         

          //center = new Mypanel(pURL,imga);

cp.add(BorderLayout.CENTER,center);

//center.validate();

cp.validate();

            

              

                //getContentPane().setLayout(null);

                setSize(new Dimension(framex, framey));



                //  getContentPane().add(hh);

                //cp.add(BorderLayout.SOUTH, panel);

                //cp.setVisible(true);

                //top.add(new JLabel("File :"));

                //getContentPane().BorderLayout(top);

        }



       

        public void actionPerformed(ActionEvent e) {

       


        center.removeAll();



        String pURL = "C:\";

        try {

        pURL = name.getDocument().getText(0, name.getDocument().getLength());

System.out.println(pURL);

} catch (BadLocationException e1) {

e1.printStackTrace();

}

ArrayList<string> imga = imgFiles(pURL);

name.setText(pURL);

                //ImageIcon img = new ImageIcon("Winter.jpg");

                //Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");

                //image = img.getImage();

        image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");

        for(int dd = 0;dd<imga.size();dd++){ <br="">System.out.println("imagename~~~:"+imga.get(dd));

        }



                //Mypanel panel = new Mypanel(pURL,imga);

        center = new Mypanel(pURL,imga);

               

                //****************************

                //center = null;

                //center = panel;



                //panel.setBounds(new Rectangle(1, 50, 300, 700));

                //getContentPane().add(panel);

               

                //center.repaint();

               

                //cp.add(BorderLayout.CENTER,null);

        //        cp.add(BorderLayout.CENTER,center);

        //        center.validate();



         //       getContentPane().validate();

        if(center!=null)

        cp.remove(center);

        center = new Mypanel(pURL,imga);

        cp.add(BorderLayout.CENTER,center);

        //center.validate();

        cp.validate();

                //getContentPane().repaint();

                //getContentPane().setVisible(true);

                //panel.setVisible(true);

//        try {

//        Thread.sleep(1000);

//        } catch (InterruptedException e1) {

//        System.out.println(e1);

//        }

                //getContentPane().repaint();

        }



       

    @SuppressWarnings("unchecked")

private ArrayList<string> imgFiles(String parentURL){

    String houzhui = new String();

    File file = new File(parentURL);

    //File file = new File("C:\");

    int o = 0;

    ArrayList<string> imgarr = new ArrayList();

    //String imgs[] = new String[5];

    String ss[] = file.list();

    //int o=0;

System.out.println("ss.length = "+ss.length);

    for(int i=0;i<ss.length;i++){ <br="">    //System.out.println("file:"+ss[i]+" @@ is File:"+(new File("C:\"+ss[i])).isFile());

   


    if(ss[i].indexOf(".")>0 && (new File(file,ss[i])).isFile()){

    houzhui = ss[i].substring(ss[i].lastIndexOf(".")+1,ss[i].length()).toLowerCase();

    //System.out.println(houzhui);

    if(houzhui.equals("jpg")

    ||houzhui.equals("gif")

    ||houzhui.equals("png")

    //||houzhui.equals("bmp")

    ||houzhui.equals("jpeg")

    ){

    o++;

//System.out.println("imgarr:"+o+"  "+ss[i]);

    //imgs[o] = ss[i];

imgarr.add(ss[i]);

    //System.out.println("imgs:"+imgs[o]);

    //o++;

    //deitel = getImage(getDocumentBase(), ss[i]);

    //int width = deitel.getWidth(this);

    //int heigh = deitel.getHeight(this);

    //System.out.println("----------------------"+ss[i]+"  "+o+" width:"+width+" heigh:"+heigh);

    //g.drawImage(deitel, 1+(100*o), 30, 80, 60, this);

    //g.setPaintMode();

    //g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)

    //g.drawImage(deitel, 150, 30, width / 8, heigh / 8, this);

    }

    }

    }

   


    return imgarr;

    }

       

}



class Mypanel extends javax.swing.JPanel {



private static final long serialVersionUID = 1L;

private Image image;

private Image[] images;

private ArrayList<string> name;



Mypanel() {

//this.image = Toolkit.getDefaultToolkit().getImage("C:\Winter.JPG");

}




Mypanel(String parentURL,ArrayList<string> imgarray){

//System.out.println("$$$$$$$$$$$$$");

name = imgarray;

images = new Image[imgarray.size()];

//System.out.println("imgarray.size(): "+imgarray.size());

for(int i=0;i<imgarray.size();i++){ <br="">


System.out.println("imgs "+i+": "+imgarray.get(i));

if(imgarray.get(i)!=null){

images[i] = Toolkit.getDefaultToolkit().getImage(parentURL+"\"+imgarray.get(i));

System.out.println("URL::"+parentURL+"\"+imgarray.get(i));

}




}




}



public void paintComponent(Graphics g1) {




System.out.println("################### Enter paintComponent : "+this.getToolTipText());

int x = 0;

int y = 0;

Graphics g = (Graphics)g1;

for(int i=0;i<images.length;i++){ <br=""> //imgs[i] = Toolkit.getDefaultToolkit().getImage("C:\"+);

//if(images[])

//this.paintComponent(g);

if(name.get(i)!=null){

if(x==0) x=20;

else if(x+90+80<400) x=x+90;

else {

x=20;

y=y+70;

}

System.out.println("@@@@@@@ x:"+x+",y:"+y+"  name = "+name.get(i)+" ");




g.drawImage(images[i], x, y,80,60, this);

}

}



g=null;




}

}




问题补充:
上面才是全部代码   谢谢!

代码我稍微修改了一下,已经OK。
原来的代码对于center的使用一点混乱。
lz先看一下,有什么问题再联系我。

[code="java"]
package nimgs;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;

public class First extends JFrame implements ActionListener {

JPanel top = new JPanel();
Mypanel center = new Mypanel();
JTextField name = new JTextField(15);
JButton show = new JButton("Show");

public First() {
    super("perfect");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    init();
    setVisible(true);
}

public static void main(String[] args) {
    new First();
}

private void init() {
    top.add(new JLabel("File :"));
    top.add(name);
    name.setText("C:\\");
    top.add(show);
    show.addActionListener(this);
    this.add(BorderLayout.NORTH, top);
    this.add(BorderLayout.CENTER, center);
    setSize(400, 700);
}

public void actionPerformed(ActionEvent e) {
    try {
        center.removeAll();
        String pURL = "";
        pURL = name.getText(0, name.getText().length());
        ArrayList<String> imga = imgFiles(pURL);
        center.setImages(pURL, imga);
        this.validate();
        this.repaint();
    } catch (BadLocationException ex) {
    }
}

@SuppressWarnings("unchecked")
private ArrayList<String> imgFiles(String parentURL) {
    String houzhui = new String();
    File file = new File(parentURL);
    ArrayList<String> imgarr = new ArrayList();
    String ss[] = file.list();
    for (int i = 0; i < ss.length; i++) {
        if (new File(file, ss[i]).isFile()) {
            houzhui = ss[i].toLowerCase();
            if (houzhui.endsWith(".jpg")
                    || houzhui.endsWith(".gif")
                    || houzhui.endsWith(".png")
                    || houzhui.endsWith(".jpeg")) {
                imgarr.add(ss[i]);
            }
        }
    }

    return imgarr;
}

}
[code]

[code="java"]
package nimgs;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.ArrayList;

class Mypanel extends javax.swing.JPanel {

private static final long serialVersionUID = 1L;
private Image[] images;
private ArrayList<String> name;

Mypanel() {
}

public void setImages(String parentURL, ArrayList<String> imgarray) {
    name = imgarray;
    images = new Image[imgarray.size()];
    for (int i = 0; i < imgarray.size(); i++) {

        System.out.println("imgs " + i + ": " + imgarray.get(i));
        if (imgarray.get(i) != null) {
            images[i] = Toolkit.getDefaultToolkit().getImage(
                    parentURL + "\\" + imgarray.get(i));
            System.out.println("URL::" + parentURL + "\\" + imgarray.get(i));
        }
    }
}

@Override
public void paintComponent(Graphics g1) {
    int x = 0;
    int y = 0;
    Graphics g = (Graphics) g1;
    for (int i = 0; i < images.length; i++) {
        if (name.get(i) != null) {
            if (x == 0) {
                x = 20;
            } else if (x + 90 + 80 < 400) {
                x = x + 90;
            } else {
                x = 20;
                y = y + 70;
            }
            System.out.println("@@@@@@@ x:" + x + ",y:"
                    + y + "  name = " + name.get(i) + " ");

            g.drawImage(images[i], x, y, 80, 60, this);
        }
    }

    g = null;
}

}
[code]

代码没仔细看,估计是因为没有刷新的缘故。
每次装载新图片之后,调用
JPanel.updateUI()
或者
JPanel.validate();
JPanel.repaint();

lz的代码不全,我也没法运行调试呀