Podaję niektóre nazwy plików z ich ikonami (jak te w Eksploratorze Windows) w JTable
. Znam dwa sposoby, aby uzyskać ikonę jeśli mam File
obiekt z lokalnego systemu plików:Jak uzyskać ikonę rozszerzenia pliku lub typu pliku bez tworzenia pliku tymczasowego?
javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(file)
dla ikony 16x16 lub większy:
sun.awt.shell.ShellFolder.getShellFolder(file).getIcon(true))
Ponieważ moje pliki są przechowywane w bazie danych nie mam obiektu File
. Moim rozwiązaniem jest utworzenie pliku tymczasowego o określonym rozszerzeniu nazwy pliku, użycie jednej z powyższych metod i zapisanie w pamięci podręcznej ikony, aby wyświetlić ją w narzędziu CellRenderer.
Szukałem rozwiązania bez plików tymczasowych i znalazł dwa nie lubię albo:
org.eclipse.swt.program.Program.findProgram(String extension).getImageData()
, ale nie chcę używać SWTorg.jdesktop.jdic.icons.IconService
z inkubatora projektu JDIC . Ostatnie zmiany naIconService
są 6 lat temu, na JDIC 2 lata temu i nie mogę znaleźć słoja do pobrania.
Czy istnieje inne rozwiązanie?
Zmieniono tag Swing na tag SWT – mKorbel
Dlaczego? Plakat wyraźnie stwierdził, że nie chcą używać SWT. –
Od przeglądania źródła FileSystemView używa wewnętrznie pliku Shellfolder. Program ShellFolder nie implementuje getIcon. Ale Win32ShellFolder2 robi (link źródłowy dostępny) http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/awt/shell/Win32ShellFolder2.html – Stefan