Tôi liệt kê một số tên tệp có biểu tượng của chúng (giống như tên trong Windows Explorer) trong một số JTable
. Tôi biết hai cách để có được những biểu tượng nếu tôi có một đối tượng File
từ hệ thống tệp cục bộ:Làm cách nào để nhận biểu tượng cho phần mở rộng tệp hoặc loại tệp mà không tạo tệp tạm thời?
javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(file)
cho một biểu tượng 16x16 hoặc cho một lớn hơn một:
sun.awt.shell.ShellFolder.getShellFolder(file).getIcon(true))
Kể từ khi tác phẩm của tôi được lưu trữ trong cơ sở dữ liệu, tôi không có đối tượng File
. Cách giải quyết của tôi là tạo một tệp tạm thời với phần mở rộng tên tệp cụ thể, sử dụng một trong hai phương pháp ở trên và lưu vào bộ nhớ cache biểu tượng để hiển thị nó trong một CellRenderer.
Tôi tìm kiếm một giải pháp mà không tập tin tạm thời và tìm thấy hai tôi không thích một trong hai:
org.eclipse.swt.program.Program.findProgram(String extension).getImageData()
, nhưng tôi không muốn sử dụng SWTorg.jdesktop.jdic.icons.IconService
từ vườn ươm của dự án JDIC . Những thay đổi cuối cùng trênIconService
là 6 năm trước, trên JDIC 2 năm trước và tôi không thể tìm thấy một chai có thể tải xuống được.
Có giải pháp nào khác không?
Tôi đã thay đổi thẻ Swing thành thẻ SWT – mKorbel
Tại sao? Người áp phích nói rõ ràng rằng họ không muốn sử dụng SWT. –
Từ khi phát hành nguồn, FileSystemView sử dụng ShellFolder trong nội bộ. ShellFolder tự nó không thực hiện getIcon. Nhưng Win32ShellFolder2 có (liên kết nguồn có sẵn) http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/awt/shell/Win32ShellFolder2.html – Stefan