`

Swing swt image 图标转换

阅读更多

我觉得这种转换当然可能很少会用到,不过了解一下也是没有坏处的。

 

例如,我们想做一个类型于Windows的explorer的一个文件树来显示文件,希望每个树结点的图标和在explorer里看到的一样。到现在为此我不知道怎么用SWT去得到每个文件或文件夹的显示图标。因此我要借助SWing来完成。

 

首先,我们需要得到一个对应于文件(夹)图标的Swing的Image对象。如下:

 

Java代码 复制代码
  1. java.awt.Image icon = ShellFolder.getShellFolder(file).getIcon(true);  
java.awt.Image icon = ShellFolder.getShellFolder(file).getIcon(true);

 

 

接下来就是要从这个Swing的Image开始做转换。显示不能直接把这个icon转换成SWT的一个Image对象。所以我们需要先把这个icon变成字节流,假如我们希望转换后图标的大小是16*16。那么,可以如下做:

 

Java代码 复制代码
  1. int width = 16;   
  2. int height = 16;   
  3. BufferedImage b = new BufferedImage(width, height,   
  4.         BufferedImage.TYPE_INT_RGB);   
  5. Graphics graphics = b.getGraphics();   
  6. graphics.drawImage(icon, 00, width, height, null);   
  7. ByteArrayOutputStream baos = new ByteArrayOutputStream();   
  8. ImageIO.write(b, "png", baos);  
				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存入一个字符数组转出流。最后只要从这个输出流中得到字节数组就可以:

 

Java代码 复制代码
  1. byte[] by = baos.toByteArray();  
byte[] by = baos.toByteArray();

 

这样就得到了这个Swing图标对应的一个字节数组。

 

要从一个字节数组得到对应的一个SWT的图标就比较简单了,我们可以先用这个数组构造出一个ImageData对象,如下:

Java代码 复制代码
  1. ImageData data = new ImageData(new ByteArrayInputStream(by));   
  2. for (int i = 0; i < width; i++) {   
  3.     for (int j = 0; j < height; j++) {   
  4.         if (data.getPixel(i, j) == 0) {   
  5.             data.setPixel(i, j, 0xffffff);   
  6.         }   
  7.     }   
  8. }  
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,如下:

Java代码 复制代码
  1. image = new Image(Display.getDefault(), data);  
image = new Image(Display.getDefault(), data);

 

最后效果图如下。其中为了更清楚的看到,我把图标的大小设成了32*32。

  • 大小: 4.3 KB
分享到:
评论

相关推荐

    Eclipse Swing Swt builder 插件安装包及安装说明

    Eclipse Swing SWT Builder插件就是专门针对这两个库设计的,它极大地简化了Swing和SWT组件的设计和布局工作。 Swing是Java的标准GUI库,基于Java AWT(抽象窗口工具包)并扩展了它,提供了更多的组件和更现代的...

    swt源码和jar包dj-native-swing-swt.jar

    在标题提到的"swt源码和jar包dj-native-swing-swt.jar"中,"dj-native-swing-swt.jar"是一个特殊的库,它结合了SWT和JNativeSwing,允许在Java Swing应用中嵌入SWT组件。这使得开发者可以在同一应用程序中同时使用...

    eclipse.3.1swing swt插件注册破解

    eclipse.3.1swing swt插件注册破解

    swt swing awt的区别

    swt swing awt的区别

    swing2swt包

    swing2swt java应用开发包,貌似现在很少了

    java swt 隐藏和显示任务栏图标和托盘图标(2)

    本文将深入探讨如何使用SWT在Java中隐藏和显示任务栏图标以及托盘图标。 首先,我们需要理解SWT中的`Display`和`Shell`概念。`Display`是应用程序的主要窗口,而`Shell`则是用户与应用交互的窗口。在SWT中,`Shell`...

    在SWING、SWT中嵌入浏览器

    在Java编程环境中,SWING和SWT(Standard Widget Toolkit)是两种常见的图形用户界面(GUI)库,用于创建桌面应用程序。然而,有时我们可能需要在这些应用中集成Web浏览功能,比如显示网页或者运行Web应用。这篇博客...

    浅析Java中Swing与SWT和AWT的区别及实现_王亚南

    Java是一种广泛使用的编程语言,在图形用户界面(GUI)设计领域提供了多种开发包,其中比较著名的有Swing、SWT和AWT。这三种技术各有特点和适用场景,在开发Java图形界面应用时,开发者需要根据实际需求选择最合适的...

    java Swing、SWT分页

    Java Swing和 SWT 是两种在Java中创建图形用户界面(GUI)的库,它们都提供了丰富的组件和工具来构建桌面应用程序。在这篇文章中,我们将深入探讨Java Swing中的分页技术和SWT(Standard Widget Toolkit)的使用,...

    swing和swt

    Java中的AWT(Abstract Window Toolkit)和Swing都是用于构建图形用户界面(GUI)的工具包,它们都属于Java基础类库(Java Foundation Classes, JFC)。AWT是早期Java GUI开发的基础,而Swing是在AWT的基础上发展...

    关于swing和swt的小练习

    在Java编程领域,Swing和SWT(Standard Widget Toolkit)是两种主要的GUI(图形用户界面)工具包,用于创建桌面应用程序。这个“关于swing和swt的小练习”压缩包文件提供了一些实际的代码示例,帮助开发者深入理解这...

    Swing Designer SWT

    Swing Designer SWT 是一款强大的图形化工具,专为在Java环境中设计Swing和SWT用户界面而设计。这款插件是Eclipse IDE的一个扩展,它允许开发者通过直观的拖放方式构建用户界面,大大简化了GUI(图形用户界面)开发...

    eclipse swing/SWT插件

    在Java桌面应用开发领域,Swing和SWT(Standard Widget Toolkit)是两个常用的库,用于创建用户界面。本篇文章将深入探讨Eclipse中的Swing和SWT插件,特别是jigloo插件。 Swing是Java Foundation Classes (JFC)的一...

    Java Swing to SWT.pdf

    ### Java Swing 迁移到 SWT 的相关知识点 #### 1. 关于本教程 - **教程简介**:本教程旨在帮助开发者了解如何将基于 Java Swing 的应用程序迁移到 SWT(Standard Widget Toolkit)。自2001年首次发布并捐赠给开源...

    java GUI (SWT\SWING jxBrower)整合网页echart ,打造出高性能功能强大图表

    Java GUI技术在开发桌面应用程序时提供了丰富的用户交互界面,其中SWT(Standard Widget Toolkit)和SWING是两个常用的库。本项目重点在于如何利用这两者与jxBrowser库结合,来展示高性能且功能强大的ECharts图表。...

    图形界面开发--AWT,Swing,SWT

    ### 图形界面开发——AWT、Swing、SWT #### 18.1 图形界面简介 **18.1.1 概述** 在介绍AWT、Swing、SWT之前,我们先来简单了解一下图形用户界面(GUI)的概念及其在Java开发中的重要性。随着计算机技术的发展,用户...

    修改Javaswing窗体图标.pdf

    Java Swing 窗体图标修改 在 Java Swing 中,修改窗体图标可以使用两种方法:使用 Toolkit 类和使用 ImageIcon 类。 方法一:使用 Toolkit 类 使用 Toolkit 类可以非常方便地修改窗体图标。首先,我们需要获取...

    swing to swt

    迁移Swing代码到SWT的过程中,有一些基本步骤可以帮助减少工作量并确保转换过程尽可能平滑: 1. **评估Swing应用程序的现状**:了解当前Swing应用的结构和功能需求,确定哪些部分可以直接迁移,哪些部分需要重构。 ...

    开发项目用SWING与RCP与SWT.JFACE的分析

    ### 开发项目用SWING与RCP与SWT.JFACE的分析 #### 一、SWT简介 SWT(Standard Widget Toolkit)作为一种图形用户界面工具包,为Java开发者提供了创建高性能且外观统一的桌面应用程序的能力。相较于传统的AWT和...

Global site tag (gtag.js) - Google Analytics