J2ME:使用 StringItems 和 Commands





5.00/5 (3投票s)
这是一篇 J2ME 入门文章,介绍如何将不同的 J2ME 组件添加到您的应用程序中,特别是 StringItem 和 Command。
引言
创建完应用程序的主界面后,下一步应该考虑的是向界面添加组件,并允许用户执行命令。继续阅读,了解如何向您的 Displayable
添加新项和命令,如何创建和更新 StringItem
内容以显示不可编辑的文本,以及如何创建各种 Command
并处理 Command
操作。
在本文中,您将创建一个“Say Hello”应用程序。该应用程序包含一个主表单,其中有一个带有标签和文本的 string
项。主表单还有两个命令:Say Hello 和 Exit 命令。当用户选择 Say Hello 命令时,它会更改 string
项的标签和文本,而 Exit 命令将用于退出应用程序并销毁所有对象。
注意:您可能也对阅读之前的 J2ME 文章感兴趣:J2ME:Hello World 移动应用程序。
以下是最终应用程序的截图
创建组件
构建“Say Hello”应用程序的第一步是创建组件,即 string
项和两个命令。string
项是您可以添加到 Form
displayable 的项之一。String
项用于显示不可编辑的文本,每个项包含两部分:标签和文本。要使用 string
项,您需要先创建一个 StringItem
类的对象并调用其构造函数。构造函数接受两个 string
参数作为标签和文本。命令是不同类型的组件,用于通过允许用户执行某些功能来实现用户交互。创建命令时,应指定三项内容:
- 作为
string
的标签,用于表示此命令。 - 类型,用于指定此命令的意图,设备可以利用此意图将其显示在屏幕上。
- 以及优先级,用于描述此命令相对于同一屏幕上的其他命令的重要性,数字越小表示优先级越高。
例如,Exit 命令的标签将是“Exit”,类型为 Exit,并且相对于其他命令,其优先级可能会最低。
首先,在您的 MIDlet
类中添加三个数据成员:第一个类型为 StringItem
,用于显示文本;另外两个类型为 Command
,分别用于 Say Hello 和 Exit 命令。
public class SayHelloMIDlet extends MIDlet {
...
private StringItem helloString;
private Command sayHelloCmd;
private Command exitCmd;
...
}
在您的 MIDlet
类的构造函数中,首先创建一个 StringItem
类的实例,并向其构造函数传递两个参数:标签和文本 string
。
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);
}
将组件添加到表单
创建任何项或 Command
后的下一步是将它们添加到您的 Form
以便显示(如果是 Command
组件,则添加到任何其他 Displayable
对象)。有两种方法可以将项添加到 Form
:使用构造函数或使用 Form
类的 append()
方法。在此应用程序中,您将使用 append()
方法。Commands
使用 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
构造函数中调用 setCommandListener()
方法并传递 MIDlet
对象的引用,将您的 Form
的命令监听器设置为您的 MIDlet
类。
public SayHelloMIDlet() {
...
helloFrm.setCommandListener(this);
}
现在,让我们在 commandAction()
方法中为每个命令添加具体的操作。为此,您可以使用该方法的两个参数。第一个参数指定了所选的命令(在这种情况下,应用程序有多个命令)。第二个参数指定了包含该命令的 Displayable
对象(如果您将同一命令添加到多个 Displayable
)。
您可以使用 if/else
语句来检查 displayable 和特定命令。
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 命令的命令操作是更改 string
项的标签和文本。您可以通过调用 StringItem
对象的 setLabel()
和 setText()
方法来更改 string
项的标签和文本。
if (c == sayHelloCmd) {
helloString.setLabel("Hello");
helloString.setText("J2ME");
}
Exit 命令的操作将用于退出应用程序并销毁所有对象。为此,只需调用 notifyDestroyed()
方法。
if (c == exitCmd) {
notifyDestroyed();
}
结论
在本文中,您学习了如何使用 string
项和命令 J2ME 组件。您还学习了如何将不同的组件添加到 displayable,以及如何通过实现 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) {
}
}
历史
- 2011 年 4 月 17 日:初始发布