我觉得这种转换当然可能很少会用到,不过了解一下也是没有坏处的。
例如,我们想做一个类型于Windows的explorer的一个文件树来显示文件,希望每个树结点的图标和在explorer里看到的一样。到现在为此我不知道怎么用SWT去得到每个文件或文件夹的显示图标。因此我要借助SWing来完成。
首先,我们需要得到一个对应于文件(夹)图标的Swing的Image对象。如下:
java.awt.Image icon = ShellFolder.getShellFolder(file).getIcon(true);
接下来就是要从这个Swing的Image开始做转换。显示不能直接把这个icon转换成SWT的一个Image对象。所以我们需要先把这个icon变成字节流,假如我们希望转换后图标的大小是16*16。那么,可以如下做:
int width = 16;
int height = 16;
BufferedImage b = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics graphics = b.getGraphics();
graphics.drawImage(icon, 0, 0, width, height, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(b, "png", baos);
先转成一个BufferedImage,然后把这个BufferedImage存入一个字符数组转出流。最后只要从这个输出流中得到字节数组就可以:
byte[] by = baos.toByteArray();
这样就得到了这个Swing图标对应的一个字节数组。
要从一个字节数组得到对应的一个SWT的图标就比较简单了,我们可以先用这个数组构造出一个ImageData对象,如下:
ImageData data = new ImageData(new ByteArrayInputStream(by));
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (data.getPixel(i, j) == 0) {
data.setPixel(i, j, 0xffffff);
}
}
}
这里有一点要注意:在没有图元点的地方,默认会显示一个黑点,我把显示黑点的地方都用一个白点做了替换。最后,根据这个data构造出对应的Image,如下:
image = new Image(Display.getDefault(), data);
最后效果图如下。其中为了更清楚的看到,我把图标的大小设成了32*32。
- 大小: 30 KB
分享到:
相关推荐
在Java的Swing库中,实现系统托盘功能可以为应用程序提供一个持续的交互界面,即使主窗口已经最小化或关闭。系统托盘,也称为通知区域或系统通知区,通常位于操作系统任务栏的右侧,允许用户快速访问常用的功能或...
SWT使用JNI(Java Native Interface)来实现这一目标,它允许Java代码直接调用操作系统提供的API,从而避免了Java AWT和Swing中的“重量级”组件带来的性能问题。 ### 2. 自定义控件的基础 在SWT中,自定义控件通常...
SWT设计的目标是提供一个高效、可定制且功能丰富的用户界面工具包,与传统的Java Swing库相比,SWT更接近于本地应用程序的外观和感觉。在本文中,我们将深入探讨SWT的扩展特性和实际应用。 首先,SWT的核心优势在于...
5. 图像处理:SWT支持加载和显示图片,可以使用Image和ImageData类来处理。这些类提供了从文件、流或数据数组加载图片的方法,并可以对图片进行缩放、裁剪等操作。 6. 监控与调试:在“swt 监控代码资料”中,监控...
在Java编程环境中,SWT(Standard Widget Toolkit)是一个强大的库,用于创建本地化的图形用户界面(GUI)。SWT是Eclipse项目的一部分,它允许开发者利用操作系统原生的UI控件,提供更接近操作系统风格的用户体验。...
10. **绘图与图像处理**:SWT的`GC`类提供低级别的绘图功能,包括绘制线条、形状、文本和位图,而`Image`类则用于加载和显示图像。 综上所述,SWT是一个强大的GUI工具包,结合JFace和其他Eclipse相关组件,为Java...
5. **org.eclipse.swt.graphics**: 提供了图形相关的API,如Image类用于处理图像,以及处理字体和颜色等。 6. **org.eclipse.swt.ole.win32**: 为Windows平台提供了OLE(Object Linking and Embedding)支持,允许在...
与Java Swing不同,SWT利用本地操作系统的能力,提供更接近操作系统风格的界面。 本压缩包“SWT 各种小示例集中”显然是一个包含多种SWT控件和JFace技术的示例集合。JFace是基于SWT的一个高级UI框架,简化了开发...
它由Eclipse基金会维护,与AWT和Swing不同,SWT直接与操作系统API交互,提供更原生的外观和性能。在这个场景中,我们讨论的是一个基于SWT编写的截图程序,其功能和使用方式类似于我们常见的QQ截图工具。 **SWT截图...
SWT的设计目标是提供一个高效、本地化的GUI API,与Java的Abstract Window Toolkit (AWT) 和Swing不同,SWT直接与操作系统底层交互,提供了更接近原生应用的性能和外观。 在给定的"SWT.rar"压缩包中,我们可以看到...
与Java Swing不同,SWT利用本地操作系统的能力,因此它能更好地融入操作系统环境,提供更好的性能和更接近原生应用的用户体验。 SWT API文档是开发者在使用SWT进行GUI编程时的重要参考资料。这个文档详细地列出了...
- **性能**: 相较于AWT/Swing等其他Java GUI框架,SWT能够提供更流畅的响应速度。 - **资源消耗**: SWT通常消耗较少的系统资源。 #### 三、JFace介绍 JFace是建立在SWT基础上的一套更高层次的UI库,它主要关注于...
SWT的设计目标是提供一个比Java AWT和Swing更快、更接近操作系统原生界面的库。它通过直接调用操作系统API来实现组件,使得应用程序具有更好的性能和响应速度。 Canvas是SWT中的一个重要组件,它是一个空白画布,...
1. SWT基础:SWT是Java AWT和Swing之外的一个选择,它通过JNI(Java Native Interface)直接与操作系统交互,提供更高效的性能。SWT控件与各种操作系统平台的原生控件相匹配,因此在不同平台上运行时,界面看起来和...
- [Plug a Swing-based development tool into Eclipse](#):如何将基于Swing的工具集成到Eclipse中。 #### 关于作者 Adrian Van Emmenis是一位独立顾问,专注于Java技术领域的研究与开发。他以其丰富的经验和深厚...
与AWT(Abstract Window Toolkit)和Swing不同,SWT直接与操作系统进行交互,因此在性能和用户体验上具有优势。在Java跳棋应用中,SWT被用来构建游戏界面,包括棋盘、棋子图像、按钮、菜单等元素。 构建Java跳棋...
SWT的设计目标是提供比Java AWT和Swing更快的性能,同时提供与操作系统更紧密的集成。 标题提到的“swt英文版API”是指SWT库的官方文档,这对于开发者来说是非常宝贵的资源。API(Application Programming ...
SWT相比Swing,性能更优,因为它是直接调用操作系统API,减少了中间层的开销。但同时,SWT的API学习曲线较陡峭,对不同操作系统的兼容性也有一定挑战。开发者需要熟悉各个平台下的控件行为差异,以便编写跨平台兼容...
1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 Swing与SWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWT与JFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2...