Chcę wyświetlić drzewo plików podobnie jak java2s.com 'Create a lazy file tree', ale uwzględnij rzeczywiste ikony systemu - szczególnie w przypadku folderów. SWT nie wydają się zaoferować to (program API nie obsługuje foldery), więc wpadłem na następujący:Jak wyświetlić ikonę systemu dla pliku w SWT?
public Image getImage(File file)
{
ImageIcon systemIcon = (ImageIcon) FileSystemView.getFileSystemView().getSystemIcon(file);
java.awt.Image image = systemIcon.getImage();
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
int[] data = ((DataBufferInt) bufferedImage.getData().getDataBuffer()).getData();
ImageData imageData = new ImageData(width, height, 24, new PaletteData(0xFF0000, 0x00FF00, 0x0000FF));
imageData.setPixels(0, 0, data.length, data, 0);
Image swtImage = new Image(this.display, imageData);
return swtImage;
}
Jednakże regiony, które powinny być przezroczyste są wyświetlane w kolorze czarnym. Jak to działa, czy jest inne podejście, które powinienem podjąć?
Aktualizacja:
Myślę, że powodem jest to, że PaletteData
nie jest przeznaczony dla przejrzystości w ogóle.
Na razie wypełniam teraz BufferedImage
z Color.WHITE
, co jest akceptowalnym sposobem obejścia tego problemu. Mimo to chciałbym poznać prawdziwe rozwiązanie ...
Poszedłem z takim podejściem. Jednak uważam, że trzeba przeskakiwać przez takie obręcze, aby działało. –