Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Иконка типа файла


Автор: Platon 17.2.2008, 13:39
Здравствуйте, уважаемые.

Встал вопрос с отображением иконки типа файла, в инете нашел более-менее нормальное решение:

Маленькая иконка
Код

File file = null;
String extension = "doc";

try
{
     //Create a temporary file with the specified extension
     file = File.createTempFile("icon", "." + extension);
 
     FileSystemView view = FileSystemView.getFileSystemView();
     Icon icon = view.getSystemIcon(file);

     //Delete the temporary file
     file.delete();
}
catch (IOException ioe)
{
}


Большая иконка.
Код


    File file = null;
    String extension = "doc";

    try
    {
         //Create a temporary file with the specified extension
         file = File.createTempFile("icon", "." + extension);
     
         sun.awt.shell.ShellFolder shellFolder = sun.awt.shell.ShellFolder.getShellFolder(file);
         Icon icon = new ImageIcon(shellFolder.getIcon(true));

         //Delete the temporary file
         file.delete();
    }
    catch (Exception e)
    {
    }



раборает! Но 1). Меня пугает класс sun.awt.shell.ShellFolder, насколько он распространен? Есть ли он в jre для Линукса? Сам задал вопрос сам отвечаю: 

http://www.onjava.com/pub/a/onjava/2005/08/10/swinghacks.html?page=last
Цитата

Get Large File Icons

Not to leave Windows lonely, here is an undocumented class that will let you obtain large desktop icons and other file information. The FileSystemView only provides access to file icons of a "default" size, which usually means 16 by 16 pixels. If you look at your operating system desktop, however, you may see icons that are much bigger, with more detail. There is no standardized way of getting to the larger icons, but on Windows you can use the hidden class called sun.awt.shell.ShellFolder to retrieve larger (32 by 32) desktop file icons. This class is only available in Sun's JVM, so it won't work with other vendors, or on other platforms. 


2). Постоянно создавать и удалять файл, чтоб определить тип - это не тема. Выход конечно прост: сделать кеш в виде 2-х Map<String, Icon>

Автор: Platon 17.2.2008, 15:13
Да, забыл указать источник: http://www.codebeach.com/tutorials/get-file-type-icon-with-java.asp

Автор: w1nd 18.2.2008, 01:04
Цитата(Platon @  17.2.2008,  13:39 Найти цитируемый пост)
Постоянно создавать и удалять файл, чтоб определить тип - это не тема.

Конечно, не тема. А что мешает доставать значок для нужного файла?

Добавлено @ 01:10
Был, кстати, ещё баг в ShellFolder (как и в FileSystemView, т. к. там используется тот же ShellFolder) при работе в windows: при изменении системных метрик в отношении размеров значков, ShellFolder продолжает возвращать значки стандартных размеров; при этом края картинок просто обрезаются. Наблюдал я это в 1.4.2, так что не знаю, как оно в новых версиях.

Автор: Platon 18.2.2008, 07:36
Цитата(w1nd @  18.2.2008,  02:04 Найти цитируемый пост)
Конечно, не тема. А что мешает доставать значок для нужного файла?

smile фишка в том, что в задумке дерево файлов другого компьютера, и тут уж говорить о нужном (существующем) файле не приходится ^_^


Цитата(w1nd @  18.2.2008,  02:04 Найти цитируемый пост)
Был, кстати, ещё баг в ShellFolder (как и в FileSystemView, т. к. там используется тот же ShellFolder) при работе в windows

Спасибо за предупреждение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)