创建一个简单的J2ME应用程序

在开发移动应用程序时,用户界面是与用户交互的首要界面。当设计了一个应用程序的主界面后,接下来要考虑的就是向界面添加组件,并允许用户执行命令。本文将指导如何为可显示对象添加新的项目和命令,如何创建和更新不可编辑文本的StringItem内容,以及如何创建各种Command并处理Command动作。

创建“Say Hello”应用程序

在本文中,将创建一个名为“Say Hello”的应用程序。该应用程序包含一个主表单,表单中有一个带有标签和一些文本的字符串项。主表单还有两个命令:“Say Hello”和“Exit”命令。当用户选择“Say Hello”命令时,它会改变字符串项的标签和文本;而“Exit”命令则用于退出应用程序并销毁所有对象。

构建“Say Hello”应用程序的第一步是创建组件,即字符串项和两个命令。字符串项是可以添加到表单显示对象中的项目之一。字符串项用于显示不可编辑的文本,每个字符串项由两部分组成:标签和文本。要使用字符串项,首先需要创建一个StringItem类的实例,并调用其构造函数。构造函数接受两个字符串参数,分别用于标签和文本。

命令是用于用户交互的不同种类的组件,允许用户执行某些功能。创建命令时,应该指定三件事:标签作为字符串,用于在显示时代表此命令;类型用于指定此命令的意图,设备在显示时可以使用;以及优先级,用于描述此命令相对于同一屏幕上其他命令的重要性,数字越小表示优先级越高。例如,退出命令将有“Exit”作为标签,退出类型,并且可能具有相对于其他命令的最低优先级。

首先,在MIDlet类中添加三个数据成员,第一个是StringItem类型,用于显示文本,另外两个是Command类型,分别用于“Say Hello”和“Exit”命令。

public class SayHelloMIDlet extends MIDlet { ... private StringItem helloString; private Command sayHelloCmd; private Command exitCmd; ... }

在MIDlet类的构造函数中,首先创建StringItem类的实例,并向其构造函数传递两个参数,即标签和文本字符串。

public SayHelloMIDlet() { ... helloString = new StringItem("Some Label:", "Some Text"); }

在同一个构造函数中,紧接着StringItem对象的创建,为两个命令创建两个Command类的实例。在Command的构造函数中传递标签、类型和优先级参数。将为“Say Hello”命令选择SCREEN类型,为“Exit”命令选择EXIT类型,并将“Say Hello”命令的优先级设置为零,即最高优先级。

public SayHelloMIDlet() { ... sayHelloCmd = new Command("Say Hello", Command.SCREEN, 0); exitCmd = new Command("Exit", Command.EXIT, 1); }

创建任何项目或命令后,下一步是将它们添加到表单中以供显示(或者在命令组件的情况下,添加到任何其他Displayable对象中)。有三种方式可以将项目添加到表单中:使用构造函数、使用表单类的append()方法。在本应用程序中,将使用append()方法。命令是使用addCommand()方法添加到Displayable的。

因此,应该使用append()方法将StringItem添加到helloFrm。

public SayHelloMIDlet() { ... helloFrm.append(helloString); ... }

接下来,使用addCommand()方法添加两个命令。

public SayHelloMIDlet() { ... helloFrm.addCommand(sayHelloCmd); helloFrm.addCommand(exitCmd); ... }

如果尝试运行应用程序,到目前为止,它会按要求工作,除了两个命令它们不会做任何事情,因为还没有指定命令动作。命令动作是当用户选择该命令时需要执行的代码。命令动作可以通过首先实现CommandListener接口,然后使用setCommandListener()方法将命令监听器设置为该实现来处理。

首先,在MIDlet类中实现CommandListener接口及其commandAction()方法。

public class SayHelloMIDlet extends MIDlet implements CommandListener { ... public void commandAction(Command c, Displayable d) { } }

现在,通过在MIDlet构造函数中调用helloFrm的setCommandListener()方法,并将MIDlet对象的引用传递给它,将表单的命令监听器设置为MIDlet类。

public SayHelloMIDlet() { ... helloFrm.setCommandListener(this); }

现在,在commandAction()方法中为每个命令添加特定动作,为此可以使用该方法的两个参数。第一个参数指定了选择的命令,以防应用程序有多个命令,如本例中的情况。第二个参数指定了包含命令的Displayable对象,以防将同一个命令添加到多个Displayable中。可以简单地使用if/else语句来检查显示和特定命令。

public void commandAction(Command c, Displayable d) { if (d == helloFrm) { if (c == sayHelloCmd) { // Say Hello command action } else if (c == exitCmd) { // Exit command action } } }

“Say Hello”命令的动作是改变字符串项的标签和文本。可以通过调用StringItem对象的setLabel()和setText()方法来改变字符串项的标签和文本。

if (c == sayHelloCmd) { helloString.setLabel("Hello"); helloString.setText("J2ME"); }

“Exit”命令的动作将用于退出应用程序并销毁所有对象,为此只需调用notifyDestroyed()方法。

if (c == exitCmd) { notifyDestroyed(); }

在本文中,学习了如何使用J2ME组件中的字符串项和命令。还学习了如何将不同的组件添加到可显示对象中,以及如何通过实现CommandListener接口和commandAction()方法来处理命令动作。

import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class SayHelloMIDlet extends MIDlet implements CommandListener { private Display display; private Form helloFrm; private StringItem helloString; private Command sayHelloCmd; private Command exitCmd; public SayHelloMIDlet() { helloFrm = new Form("Hello J2ME"); helloString = new StringItem("Some Label:", "Some Text"); sayHelloCmd = new Command("Say Hello", Command.SCREEN, 0); exitCmd = new Command("Exit", Command.EXIT, 1); helloFrm.append(helloString); helloFrm.addCommand(sayHelloCmd); helloFrm.addCommand(exitCmd); helloFrm.setCommandListener(this); } protected void startApp() { display = Display.getDisplay(this); display.setCurrent(helloFrm); } public void commandAction(Command c, Displayable d) { if (d == helloFrm) { if (c == sayHelloCmd) { helloString.setLabel("Hello"); helloString.setText("J2ME"); } else if (c == exitCmd) { notifyDestroyed(); } } } protected void pauseApp() { } protected void destroyApp(boolean unconditional) { } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485