本文是介绍MIDP平台系列文章的开篇。我们首先从j2me GUI基础编程开始( javax.microedition.lcdui类),然后讨论数据存储和无线连接方面的问题。通过这一系列的文章,我会为读者提供一个示范性的Expenses MIDlet程序,这个小软件的主要作用是帮助用户在旅行途中检查和记录自己的商务开销情况。最初的Expenses程序很简单,随着我们对j2me的了解逐渐深入,这个示例程序也会变得越来越复杂。
关于CLDC和MIDP
如果你对我在上面提到的缩略语不知所云,建议你参考《理解j2me平台》,此外,你也不妨再阅读下《j2me MIDP无线应用程序的开发》和《用Wireless Toolkit创建和测试j2me
MIDP应用程序》这两篇文章来了解有关的背景知识,通过这些介绍,你可以大致上知道该如何获得你所需要的软件,同时明确Sun推出的Wireless
Toolkit的相关知识,我就是利用这些软件来创建和测试Expenses MIDlets的。
就像我刚才说到的那样,我们首先编写了一个很简单的程序。这个时候的Expenses应用程序只是由一个简单的MIDlet (Expenses) 组成,它提供了一个粗糙的用户界面和数据类(ExpenseInfo)
,这个类对开销情况建模,提供字段表项,比如日期和时间、项目说明、数量和类别等。你可以从这里下载该程序的项目源代码。
ExpenseInfo本身已经具备相当明晰的自我解释性。所以我就不打算再耗费更多的时间专门阐述它了;反过来我会用更多的时间讨论Expenses的用户界面。不过我得提醒大家,
MIDP不支持浮点数字类型的变量。所以,在表示开销数量的时候,我只好对美元和美分分别采用int字段来表示其真实的数值。
好,现在我们就来谈谈Expenses采用的用户界面(UI)组件。然后我们讨论界面之后的事件处理。在图A中你可以看到Expenses在DefaultGrayPhone模拟器运行状态下的外观。用户界面由一个List组件和三个Command组件组成。这三个组件分别负责退出应用程序、编辑开销帐目和添加新项目等。屏幕上所显示的数据是由ExpenseInfo类的静态方法所产生的简单测试数据。由于到这一步我们还没有讨论到数据的存储问题,所以我们现在无法在应用程序多次运行期间保存数据。
图A
正如你可能已经了解的那样(如果你恰好不知道,我建议你不妨查阅上面提到的文章),lcdui组件主要分为三种类型:从Screen派生的组件、从Item派生的组件和两者之外的其他综合性组件。Screen和Item组件的主要区别在于:Screen组件为其他组件起到了容器的作用。而组成Expenses用户界面的组件则是名为lsMain的List组件。
Lists 大致可类比于桌面应用程序中常见的列表框,主要的差别在于List在它自己的窗口之内,而其他列表框则通常包含在其他窗口中。Lists是一种Screen对象,它可以包含其他组件,但Lists
也只能包含Command组件。
Lists分三种,在调用List构造器的时候,通过设置list类的静态常量,你可以设定其类别。以下是对三种Lists的概述:
Expenses MIDlet的构造器代码如程序清单A所示。其中,lsMain是implicit List组件;采用append方法为其添加了若干项开销;然后用addCommand方法增加了三个Commands 。最后设置lsMain的命令侦听器(setCommandListener),这样Expenses就可以处理lsMain引发的事件了。