我在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。还有其他解决方案吗?
答案 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)
您真的需要临时文件才能使用第一个选项吗?文件不必表示实际存在的文件......