此文档的翻译仅仅是为了督促我学习LWUIT库,英语能力有限,相关的英语文档也看的少,翻译不好的地方,请多多指教。
这本书描述了怎么使用LWUIT库。LWUIT可以帮助你在手机或者其他设备商开发出具有感染力的图形用户界面,但这些设备需要支持MIDP2.0。LWUIT包括可视组件和其他用户接口部分,如主题,渐变,动画等。
在介绍完LWUIT基础部分后,这本书还介绍了对各种组件和其它LWUIT包的使用
LWUIT是一个轻量级的组件库,其思想来源于Swing,但是是为手机,机顶盒这样的资源有限的设备设计的。LWUIT具备插件式的主题功能,组件与容器间的层次关系和基于对GUI工具包的抽象。轻量级表明这个库中的组件通过Java源码确定他们的状态,而不需要同等于本地的描述
内部接口和抽象类提供接口的抽象和基于这个框架的APIs。这体现了便携性,并且提供了在现在的设备和未来设备间的移植途径。比如Graphics是一个基于这个框架的graphics对象的抽象。
LWUIT库试图在思想上避免“最低级普通的演示”,他们是通过低级平台上失去的一些特性来实现的,并尽力利用高级平台。图1-1展示了组件类的层次关系。
LWUIT库是一个严格的组件UI库,并不试图抽象基于类似网络或者系统存储的系统服务。他也不会尝试去解决与本地图像相关联的UI问题等等。
为了便携性,LWUIT库实现它自己在本地系统画布上的图层,并且提供组件抽象。这个抽象通过几个掩饰特定系统设备的关键类完成,比如Graphics,Image和Font。
当使用LWUIT库的时候,使用对任何事物的抽象类是很重要的。为了避免变体,没有办法进入哪些类的“真实的”实例(比如,javax.microedition.lwuit.Graphics)。
LWUIT努力使在小设备上具备更多的功能,但这可能造成混淆现象,或者出现由很多图像的重量引起的阻塞。为了解决这些问题,LWUIT使用了一种可选的资源文件格式,它可以改善对资源的利用。更多的细节,看第九章,“资源”。
EXAMPLE 1-1 Hello World Example for MIDP
package com.cdinfo.lwuit.helloworld; import javax.microedition.midlet.*; import com.sun.lwuit.Display; import com.sun.lwuit.Form; import com.sun.lwuit.Label; import com.sun.lwuit.layouts.BorderLayout; import com.sun.lwuit.plaf.UIManager; import com.sun.lwuit.util.Resources; import java.io.IOException; /** * @author ZY */ public class HelloWorldMidlet extends MIDlet { public void startApp() { Display.init(this); try { Resources res = Resources.open("/javaTheme.res"); UIManager.getInstance().setThemeProps(res.getTheme("javaTheme")); } catch(IOException ioe) { ioe.printStackTrace(); } Form form = new Form("HelloLWUIT"); form.setLayout(new BorderLayout()); form.addComponent(BorderLayout.CENTER, new Label("Hello LWUIT;Hello World")); form.show(); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
这是一个简单的hello world例子,它基于MIDP。所有的UI代码使用的是LWUIT,它也是与其他平台兼容的,比如CDC。
然而这个例子是特定为MIDP的。对于MIDP,应用管理系统(AMS)要求有一个MIDlet类存在,而在CDC环境下,一个Xlet则需要存在(在Java SE下,你则需要一个含有main方法的类,等等)。
注意在EXAMPLE 1-1中,任何一个使用LWUIT库的应用都的使用第一行代码,用display注册主类。这个行为时工具特定的。在MIDP中,你不用做太多去参考父MIDlet,因此这个操作必须在应用的开始就展现出来。
UI代码的创建与MIDlet合并是一件简单的事,但是它应该与一些将移植到未来同样引入LWUIT库的平台的类相分离。
为了提高兼容性,LWUIT库完全控制和封装UI线程。它有一个类似于”EDT”的主线程(思想来源于Swing和AWT中的时间分发线程)。所有的事件和绘画请求都通过这个线程分发。这样就保证了事件和绘画请求有序进行,并且避免造成线程问题的危险。它同样使得可能造成次线程模型不一致的框架能够移植。查阅Display类(在API文档中的com.sun.lwuit.Display)获取更多关于与EDT整合和序列化请求的细节。