Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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