我的代码如下所示。我想从文件夹中将所有图像名称显示到jList中。但是下面的代码显示输出屏幕中的名称而不是jList.Please帮助解决这个问题
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String path = "C:\\Users\\Dell\\Documents\\NetBeansProjects\\pasword2\\src\\images\\";
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
DefaultListModel listModel = new DefaultListModel();
int count = 0;
for (int i = 0; i < listOfFiles.length; i++)
{
System.out.println("check path"+listOfFiles[i]);
String name = listOfFiles[i].toString();
// load only JPEGs
if ( name.endsWith("jpg")||name.endsWith("bmp") ) {
try
{
ImageIcon ii = new ImageIcon(ImageIO.read(listOfFiles[i]));
listModel.add(count++, ii);
}
catch(IOException e){}
}
}
jList1.setModel(listModel);
}
答案 0 :(得分:1)
您希望文件名仅显示在列表中,但您要重新添加图像。而不是
try{
ImageIcon ii = new ImageIcon(ImageIO.read(listOfFiles[i]));
listModel.add(count++, ii);
}
catch(IOException e){}
只做
listModel.add(count++, listOfFiles[i].getName());
如果要将ImageIcon和文件名存储到一个对象中,可以创建一个包装类。像
这样的东西public class NamedImageIcon {
private String imageName;
private ImageIcon icon;
public NamedImageIcon(ImagIcon icon, String imageName) {
this.icon = icon;
this.imageName = imageName;
}
// getters and setters
@Override
public String toString() {
return imageName;
}
}
不,当你循环时,你可以为名称和图像创建一个包装器。然后,您可以将NamedImageIcon
的实例添加到DefaultListModel
。而且由于你重写了toString(),所以列表中唯一出现的就是名字。因此,当您从列表中选择名称时,您将可以直接访问相应的图像