1 /* 2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.swing.filechooser; 27 28 import java.awt.Image; 29 import javax.swing.Icon; 30 import javax.swing.ImageIcon; 31 import javax.swing.JFileChooser; 32 import javax.swing.UIManager; 33 import sun.awt.shell.ShellFolder; 34 import java.io.File; 35 import java.io.FileNotFoundException; 36 37 /** 38 * SystemIcon is JFileChooser's gateway to the 39 * file system icons. 40 * 41 * <p> 42 * 43 * @author shashidhara 44 */ 45 public class SystemIcon { 46 47 /** 48 * Icon for a file, directory, or folder as it would be displayed in 49 * a system file browser for the requested size. 50 * 51 * The default implementation gets information from the ShellFolder class. 52 * 53 * @param f a <code>File</code> object 54 * @param size width and height of the icon in pixels to be scaled(valid range: 1 to 256) 55 * @return an icon as it would be displayed by a native file chooser 56 * @see JFileChooser#getIcon 57 * @since 12 58 */ 59 static public Icon getSystemIcon(File f, int size) { 60 if (f == null) { 61 return null; 62 } 63 64 if (size > 256 || size < 1) { 65 return null; 66 } 67 68 ShellFolder sf; 69 try { 70 sf = ShellFolder.getShellFolder(f); 71 } catch (FileNotFoundException e) { 72 return null; 73 } catch (InternalError e) { 74 System.err.println("FileSystemView.getShellFolder: f="+f); 75 e.printStackTrace(); 76 return null; 77 } 78 79 Image img = sf.getIcon(size); 80 if (img != null) { 81 return new ImageIcon(img, sf.getFolderType()); 82 } else { 83 return UIManager.getIcon(f.isDirectory() ? "FileView.directoryIcon" : "FileView.fileIcon"); 84 } 85 } 86 }