java - 如何在不创建临时文件的情况下获取文件扩展名或文件类型的图标?

标签 java file swing icons desktop

我在 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(),但是我不想用SWT
  • org.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/

相关文章:

Java使用嵌套for循环打印带有旋转数字的数字方 block

java - 如何在 Hadoop mapreduce 中处理负载平衡?

java - 无法使用修饰符 "public"访问类 java.nio.DirectByteBuffer(在模块 java.base 中)的成员

Java 将数字格式化为模式,例如1234567890 -> 1234 - 56 78 90

javascript - 如何从 JavaScript 的文件对象中获取所有键/参数/属性?

java - 如何通过单击 JDialog 中的按钮来运行 JFrame 中的方法?

java - 无法读取文件名

actionscript-3 - 新的 Flash 5.5 应用程序 - 最佳方法

java - 在黑色 JFrame 上绘制线条

java - JCheckbox 显示一个 displayName 但在幕后保存不同的值