(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++){
        }

        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++){

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++){
//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);
}
}
}
}

你可能感兴趣的:(C++,c,swing,C#)