如何在JFileChooser中显示文件的自定义图标?

时间:2013-07-13 13:05:51

标签: java swing jfilechooser

如何在JFileChooser中显示文件的自定义图标?好吧,我既不想要文件的默认系统图标,也不想要JFileChooser附带的默认图标。我想要自己的偶像。

我想通过它的扩展名设置文件的图标。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

我们可以使用包含Hashtable类型扩展名的StringImageIcon

Hashtable位于java.util

FileView位于javax.swing.filechooser

// Create a hashtable for String,ImageIcon
Hashtable<String,ImageIcon> table=new Hashtable<>();

    // Add extensions and icons
    table.put(".txt",new ImageIcon("txtfile.png"));
    table.put(".doc",new ImageIcon("docfile.png"));
    table.put(".ppt",new ImageIcon("pptfile.png"));
    table.put(".lnk",new ImageIcon("link.png"));
    table.put(".png",new ImageIcon("image.png"));
    table.put(".gif",new ImageIcon("image.png"));
    table.put(".jpeg",new ImageIcon("image.png"));
    table.put(".jpg",new ImageIcon("image.png"));

在班级MyFileView

class MyFileView extends FileView
{
Hashtable<String,ImageIcon> table;
ImageIcon dirIcon;

    public MyFileView(Hashtable<String,ImageIcon> table,ImageIcon dirIcon)
    {
        this.table=table;
        this.dirIcon=dirIcon;
    }

    public Icon getIcon(File f)
    {
    // Do display custom icons

        // If dir
        if(f.isDirectory()) 
        {
            if(dirIcon!=null) return dirIcon;
        return new ImageIcon("myfoldericon.png");
        }

        // Get the name
        String name=f.getName();
        int idx=name.lastIndexOf(".");

        if(idx>-1)
        {
        String ext=name.substring(idx);
            if(table.containsKey(ext))
        return table.get(ext);
        }

    // For other files
    return new ImageIcon("myownfileicon.png");
    }
}

使用此代码,

MyFileView m=new MyFileView(table,new ImageIcon("diricon.png"));
JFileChooser jf=new JFileChooser();
jf.setFileView(m);
jf.showOpenDialog(this);

如果我们不想通过扩展程序或者我们想要为硬盘驱动器设置自定义图标,那么我的计算机就可以使用UI默认设置。