Tôi muốn hiển thị một cây tệp tương tự như java2s.com 'Create a lazy file tree', nhưng bao gồm các biểu tượng hệ thống thực tế - đặc biệt là cho các thư mục. SWT dường như không cung cấp tính năng này (API chương trình không hỗ trợ thư mục), vì vậy tôi đã đưa ra những điều sau:Làm thế nào để hiển thị biểu tượng hệ thống cho một tệp trong 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;
}
Tuy nhiên, các khu vực phải trong suốt được hiển thị bằng màu đen. Làm thế nào để tôi làm việc này, hoặc có cách tiếp cận khác tôi nên thực hiện?
Cập nhật:
Tôi nghĩ lý do là PaletteData
không dành cho tính minh bạch ở tất cả.
Hiện tại, tôi điền vào BufferedImage
với Color.WHITE
ngay bây giờ, đây là giải pháp có thể chấp nhận được. Tuy nhiên, tôi muốn biết giải pháp thực sự ở đây ...
Tôi đã đi với cách tiếp cận đó. Tuy nhiên, tôi cảm thấy rất buồn khi bạn phải nhảy qua các vòng như vậy để làm cho nó hoạt động. –