Quiero mostrar un árbol de archivos de manera similar a java2s.com 'Create a lazy file tree', pero incluir los iconos del sistema real, especialmente para las carpetas. SWT no parece ofrecer este (API programa no admite carpetas), por lo que se me ocurrió lo siguiente:¿Cómo mostrar el ícono del sistema para un archivo en 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;
}
Sin embargo, las regiones que deben ser transparentes se muestran en negro. ¿Cómo hago que esto funcione, o hay otro enfoque que debería tomar?
Actualización:
Creo que la razón es que PaletteData
no está destinado a la transparencia en absoluto.
Por ahora, llené el BufferedImage
con Color.WHITE
ahora, lo cual es una solución aceptable. Aún así, me gustaría saber la solución real aquí ...
Fui con ese enfoque. Me parece triste, sin embargo, que tengas que pasar por esos aros para que funcione. –