近段时间在弄GWT这一块,开发中遇到的一些不错的方法或者技巧,在此做个分享和记录,有不同见解可发表意见  互相切磋。

  在web开发中,必然涉及到网页中的图片,本地浏览网页,要下载在服务器端的图片,然后才能正常浏览。那么浏览器从服务器上下载资源时,时间都耗在TCP/IP的连接,然后服务器还要准备资源。如果一个网页中有几十甚至上百张图片的话,其中消耗的时间可想而知。在普通的html网页中,我们可以把所有的一些常用图标放在一张图片中,然后通过"background-positon:x y"来定位,我们称之为"CSS Sprite"。但这确实是一件费力费时的事,要事先计算好每个图片的坐标。

下图是亚马逊的图标的一部分:

  

  在GWT中也时常要引用图片,它也提供了这样的方法,我称之为GWT的"CSS Sprite",不过它实现比较简单,不用把图片合并一张图片然后自己计算坐标。它使用ClientBundle接口,借助它的注解功能实现。(本人使用的是GWT2.5,之前使用ImageBundle可以,后来发现该类已经@Deprecated了)

  要是有ClientBundle接口,首先需要在gwt.xml文件中加入如下代码:

  

 <inherits name="com.google.gwt.resources.Resources" />

  然后写一个接口继承ClientBundle:

  

 import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource; public interface MyImageBundle extends ClientBundle {
@Source("201.png")
ImageResource upicon(); @Source("202.png")
ImageResource downicon();
}

其中5行与8行声明使用的图片名称,此处只写名称是因为该图片和java类放在一个文件夹下,如果放在其他位置,需要加入对应的地址。

6行与8行声明两个方法,返回类型是ImageResource,根据Google官方文档,查到可以返回类型较多,有TextResource可用于I18N,DataResource用于返回对应数据资源,ExternalTextResource和TextResource一样,返回txt文档,只不过前者是异步获取,返回一个方法,CssResource用于返回css文件,关于更多方法,详细说明可以参照文档:http://www.gwtproject.org/doc/latest/DevGuideClientBundle.html

然后在我们的GWT项目的入口类里添加控件,并把图片添加进去:

 public class Test implements EntryPoint {

     private final MyImageBundle imgBundle = GWT.create(MyImageBundle.class);
/**
* This is the entry point method.
*/
private Image firImg;
private Image lasImg;
public void onModuleLoad() {
RootPanel rootPanel = RootPanel.get();
VerticalPanel panel = new VerticalPanel();
panel.setWidth("700px");
SimplePanel simple = new SimplePanel();
SimplePanel simple2 = new SimplePanel(); firImg = new Image(imgBundle.downicon());//获取图片资源
lasImg = new Image(imgBundle.upicon()); simple.add(firImg);
simple2.setWidget(lasImg);
panel.add(simple);
panel.add(simple2);
rootPanel.add(panel);
}
}

第三行是通过GWT.create()方法获取该类。第16和第17行通过该类写的方法,获取到对应的图片。

最后 我们在eclipse中开始编译项目。在"war-项目名"目录下,会生成类似于"74EBE333D8BEBF96EA4673E8E087D621.cache.png"这样的一张名称很"crazy"的图片,打开后,会发现是刚才那两张图片合并在一起的,就是这么神奇!

最新文章

  1. Win8换成Win7系统问题小结(修改主板BIOS方法)
  2. Mono.Cecil 初探(一):实现AOP
  3. iOS屏幕旋转
  4. SQLServer中ISNULL、NULLIF和CONVERT函数
  5. CSS3盒模型display:box详解
  6. hdu-acm steps Common Subsequence
  7. linux &#160; 截取时间段的日志
  8. (收藏)sokcet编程
  9. 创建安全的ashx文件,ashx编译
  10. Learning WCF Chapter2 Service Contracts
  11. 如何新建XCode项目
  12. Ajax请求安全性讨论 - Eric.Chen(转)
  13. c# in deep 之Lambda表达式
  14. Java 编译打包命令
  15. P1045
  16. HTML5之Canvas画圆形
  17. 基于JWT标准的用户认证接口实现
  18. CSS中的ul与li样式详解 list-type
  19. 在腾讯云(windows)上搭建node.js服务器
  20. 网络爬虫BeautifulSoup库的使用

热门文章

  1. dll和lib
  2. INSPIRED启示录 读书笔记 - 第15章 特约用户
  3. ASP.NET5 MVC6 利用Middleware 创建可访问HttpContext 的业务类工厂。(代替HttpContext.Current)
  4. php记录代码执行时间
  5. Ansi 与 Unicode 字符串类型的互相转换
  6. 3DES双倍长加密
  7. Word 2010 怎么在每一章中使用不同的页眉
  8. 【新手专属】IntelliJ IDEA删除项目
  9. ie-9 以下ajax无法跨域的问题。只要add:jQuery.support.cors=true;即可
  10. 21 Python 异常处理