Я хочу отобразить дерево файлов аналогично java2s.com 'Создать ленивое дерево файлов' , но включить фактические системные значки - особенно для папок. SWT, похоже, не предлагает этого (программный API не поддерживает папки), поэтому я придумал следующее:
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;
}
Однако области, которые должны быть прозрачными, отображаются черным цветом. Как мне заставить это работать, или есть другой подход, который я должен использовать?
Обновление:
Я думаю, причина в том, что PaletteData
вообще не предназначен для прозрачности.
Пока я заполняю BufferedImage
сейчас Color.WHITE
, что является приемлемым решением. Тем не менее, я хотел бы узнать реальное решение здесь ...