我在 JTable
中列出了一些文件名及其图标(如 Windows 资源管理器中的图标)。如果我有来自本地文件系统的 File
对象,我知道两种获取图标的方法:
javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon( file )
对于 16x16 图标或更大的图标:
sun.awt.shell.ShellFolder.getShellFolder( file ).getIcon( true ) )
由于我的文件存储在数据库中,因此我没有 File
对象。我的解决方法是创建一个具有特定文件扩展名的临时文件,使用上述两种方法之一并缓存图标以在 CellRenderer 中显示它。
我搜索了一个没有临时文件的解决方案,发现两个我也不喜欢:
org.eclipse.swt.program.Program.findProgram(String extension).getImageData()
,但是我不想用SWTorg.jdesktop.jdic.icons.IconService
来自 JDIC 的孵化器项目。IconService
的最后一次更改是 6 年前,JDIC 是 2 年前,我找不到可下载的 jar。
还有其他解决方案吗?
最佳答案
Looks就像您已经发现了这样做的方法一样,除非您想深入了解 native 库等。
FileSystemView使用 Win32ShellFolder在内部,所以它们基本相同。
我还挖掘了 org.eclipse.swt.program.Program 的来源和它org.eclipse.swt.internal.win32.OS .然后,OS 类对 Icon 使用 native 调用。在这一点上,除非你真的不能创建一个临时文件,否则我不会走这条路。
对于 JDIC,我只找到了 http://kickjava.com/src/org/jdesktop/jdic/tray/internal/impl/WinTrayIconService.java.htm稍加挖掘(可能不相关,但会做一些标志性的事情:D)。也称为原生。
关于java - 如何在不创建临时文件的情况下获取文件扩展名或文件类型的图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521294/