图像名称未显示在jList中

时间:2014-03-25 15:45:55

标签: image swing netbeans-7 jlist

我的代码如下所示。我想从文件夹中将所有图像名称显示到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);
}

1 个答案:

答案 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(),所以列表中唯一出现的就是名字。因此,当您从列表中选择名称时,您将可以直接访问相应的图像