(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);
}
}
}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值