< prev index next >

src/java.desktop/share/classes/javax/swing/filechooser/FileSystemView.java

Print this page

        

@@ -72,10 +72,24 @@
 
     private boolean useSystemExtensionHiding =
             UIManager.getDefaults().getBoolean("FileChooser.useSystemExtensionHiding");
 
     /**
+     * An icon image query option that requests the small file icon.
+     *
+     * @since 10
+     */
+    public static final int FILE_ICON_SMALL = -1;
+
+    /**
+     * An icon image query option that requests the large file icon.
+     *
+     * @since 10
+     */
+    public static final int FILE_ICON_LARGE = -2;
+
+    /**
      * Returns the file system view.
      * @return the file system view
      */
     public static FileSystemView getFileSystemView() {
         if(File.separatorChar == '\\') {

@@ -255,10 +269,52 @@
             return UIManager.getIcon(f.isDirectory() ? "FileView.directoryIcon" : "FileView.fileIcon");
         }
     }
 
     /**
+     * Returns icon image if it is associated with the specified file or
+     * {@code null} otherwise. Depending on the passed {@code size} different
+     * sizes of file icon may be queried. If value of the {@code size} argument
+     * equals to {@code #FILE_ICON_SMALL} or {@code #FILE_ICON_LARGE} then
+     * the small or large file icon variant is returned correspondingly.
+     * For any positive size value the exact file icon size is queried.
+     *
+     * @param file a file
+     * @param size size to query
+     * @return file icon
+     * @throws NullPointerException if {@code file} equals {@code null}
+     * @see #FILE_ICON_SMALL
+     * @see #FILE_ICON_LARGE
+     * @since 10
+     */
+    public ImageIcon getSystemIcon(File file, int size) {
+        if (file == null) {
+            throw new NullPointerException("file is null");
+        }
+        ShellFolder sf;
+        try {
+            sf = ShellFolder.getShellFolder(file);
+        } catch (FileNotFoundException e) {
+            return null;
+        }
+        Image img = null;
+        if (size == FILE_ICON_SMALL) {
+            img = sf.getIcon(false);
+        } else if (size == FILE_ICON_LARGE) {
+            img = sf.getIcon(true);
+        } else if (size > 0) {
+            img = sf.getIcon(size);
+        } else {
+            throw new IllegalArgumentException("Wrong size value +" + size);
+        }
+        if (img != null) {
+            return new ImageIcon(img, sf.getFolderType());
+        }
+        return null;
+    }
+
+    /**
      * On Windows, a file can appear in multiple folders, other than its
      * parent directory in the filesystem. Folder could for example be the
      * "Desktop" folder which is not the same as file.getParentFile().
      *
      * @param folder a <code>File</code> object representing a directory or special folder
< prev index next >