How to display default system icon for files in JFileChooser?

java, jfilechooser, swing

Solution

We can use the `FileSystemView` class and get it's object by calling `getFileSystemView()` static method in it and then use the `getSystemIcon()` method which takes a `File` object and returns it's icon.

`FileSystemView` and `FileView` classes are present in `javax.swing.filechooser` package. `File` class is in the `java.io` package.

Note: `FileSystemView` does not extend `FileView`. Hence you cannot use `FileSystemView` object in `jf.setFileView()`

JFileChooser jf=new JFileChooser();
jf.setFileView(new MyFileView());
jf.showOpenDialog(this);

class MyFileView extends FileView
{
      public Icon getIcon(File f)
      {
      FileSystemView view=FileSystemView.getFileSystemView();
            return view.getSystemIcon(f);
      }
}

`this` represents the current frame. Assume that the class in which this code is written is sub class of `JFrame`

Or in a simple way,

jf.setFileView(new FileView(){
            public Icon getIcon(File f)
            {
                return FileSystemView.getFileSystemView().getSystemIcon(f);
            }
        });

Problem

How to display default system icon for files in `JFileChooser`? i.e. the icons of the files in `JFileChooser` should be the same as the icons that appear on desktop and explorer? For example, NetBeans icon will not appear the same in `JFileChooser` as it appears on the desktop! How to do this?

Original source

Related problems