簡體   English   中英

如何在不創建臨時文件的情況下獲取文件擴展名或文件類型的圖標?

[英]How to get the icon for a file extension or filetype without creating a temp file?

我在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。

還有其他解決方案嗎?

看起來你已經發現了這樣做的方法,除非你想深入了解本地庫等。

FileSystemView 內部使用Win32ShellFolder,因此它們基本相同。

我還挖掘了org.eclipse.swt.program.Program的Source以及org.eclipse.swt.internal.win32.OS 然后OS類使用Icon的本機調用。 此時,除非你真的無法創建臨時文件,否則我不會走那條路。

對於JDIC,我只找到了http://kickjava.com/src/org/jdesktop/jdic/tray/internal/impl/WinTrayIconService.java.htm並進行了一些挖掘(可能沒有關聯,但是做了很多事情:D) 。 也稱為原生。

你真的需要臨時文件來使用第一個選項嗎? 文件不必表示實際存在的文件......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM