Je souhaite afficher une arborescence de fichiers de la même manière que java2s.com 'Create a lazy file tree', mais incluez les icônes système actuelles - en particulier pour les dossiers. SWT ne semble pas offrir ce (API du programme ne prend pas en charge les dossiers), alors je suis venu avec ce qui suit:Comment afficher l'icône du système pour un fichier dans 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;
}
Cependant, les régions qui devraient être transparentes sont affichées en noir. Comment est-ce que cela fonctionne, ou y a-t-il une autre approche que je devrais suivre?
Mise à jour:
Je pense que la raison est que PaletteData
ne vise pas la transparence du tout.
Pour l'instant, je remplis le BufferedImage
avec Color.WHITE
maintenant, ce qui est une solution de contournement acceptable. Pourtant, je voudrais savoir la vraie solution ici ...
Je suis allé avec cette approche. Cependant, je trouve triste que vous ayez à traverser de tels obstacles pour que cela fonctionne. –