Как получить значок для расширения файла или типа файла без создания временного файла? - PullRequest
28 голосов
/ 15 декабря 2011

Я перечисляю некоторые имена файлов с их значками (например, в Проводнике Windows) в JTable. Я знаю два способа получить значок, если у меня есть объект 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 года назад, и я не могу найти загружаемую банку.

Есть ли другое решение?

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

Выглядит как будто вы уже нашли способ сделать это, если только вы не хотите погружаться в собственные библиотеки и т. Д.

FileSystemView использует Win32ShellFolder внутренне, поэтому они в основном одинаковы.

Я также откопал Источник для org.eclipse.swt.program.Program и вместе с ним org.eclipse.swt.internal.win32.OS .Класс ОС затем использует собственный вызов для Icon.На данный момент, если вы действительно не можете создать временный файл, я бы не пошел по этому пути.

Для JDIC я нашел только http://kickjava.com/src/org/jdesktop/jdic/tray/internal/impl/WinTrayIconService.java.htm с небольшим копанием (может быть, не связано, но делает что-то значимое: D).Также звонит родной.

0 голосов
/ 16 декабря 2011

Вам действительно нужен временный файл, чтобы использовать первый вариант?Файл не должен обозначать файл, который действительно существует ...

...