java - texto - tipos de archivos de windows
¿Cómo obtener el ícono para una extensión de archivo o tipo de archivo sin crear un archivo temporal? (2)
Enumero algunos nombres de archivo con sus iconos (como los que están en el Explorador de Windows) en una JTable
. Conozco las dos formas de obtener el ícono si tengo un objeto File
desde el sistema de archivos local:
javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon( file )
para un icono de 16x16 o para uno más grande:
sun.awt.shell.ShellFolder.getShellFolder( file ).getIcon( true ) )
Como mis archivos están almacenados en una base de datos, no tengo el objeto File
. Mi solución consiste en crear un archivo temporal con la extensión de nombre de archivo específica, usar uno de los dos métodos anteriores y almacenar en caché el icono para mostrarlo en un CellRenderer.
Busqué una solución sin archivos temporales y encontré dos que tampoco me gustan:
-
org.eclipse.swt.program.Program.findProgram(String extension).getImageData()
, pero no quiero usar SWT -
org.jdesktop.jdic.icons.IconService
de la Incubadora del proyecto JDIC . Los últimos cambios enIconService
son hace 6 años, en JDIC hace 2 años y no puedo encontrar un contenedor descargable.
¿Hay alguna otra solución?
¿Realmente necesitas el archivo temporal para usar la primera opción? Un archivo no tiene que denotar un archivo que realmente existe ...
Parece que ya descubrió la forma de hacerlo, a menos que quiera bucear en bibliotecas nativas, etc.
FileSystemView usa Win32ShellFolder internamente, por lo que básicamente son los mismos.
También desenterré la Fuente para org.eclipse.swt.program.Program y con ella org.eclipse.swt.internal.win32.OS . La clase de sistema operativo luego utiliza una llamada nativa para el icono. En este punto, a menos que realmente no puedas crear un archivo temporal, yo no iría por ese camino.
Para JDIC, solo encontré http://kickjava.com/src/org/jdesktop/jdic/tray/internal/impl/WinTrayIconService.java.htm con un poco de excavación (puede no estar relacionado, pero hace cosas icónicas: D) . También se llama nativo.