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

时间:2011-12-15 14:01:58

标签: 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年前,2年前在JDIC上,我找不到可下载的jar。

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:4)

Looks就像你已经发现了这样做的方法,除非你想深入本土图书馆等。

FileSystemView在内部使用Win32ShellFolder,因此它们基本相同。

我还挖掘了org.eclipse.swt.program.Program及其org.eclipse.swt.internal.win32.OS的来源。然后OS类使用Icon的本机调用。此时,除非你真的无法创建临时文件,否则我不会走那条路。

对于JDIC我只发现了http://kickjava.com/src/org/jdesktop/jdic/tray/internal/impl/WinTrayIconService.java.htm并进行了一些挖掘(可能没有关联,但有些事情是:D)。也称为原生。

答案 1 :(得分:0)

您真的需要临时文件才能使用第一个选项吗?文件不必表示实际存在的文件......