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?