65.9K
CodeProject 正在变化。 阅读更多。
Home

J2ME:使用 StringItems 和 Commands

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2011年4月17日

CC (ASA 3U)

5分钟阅读

viewsIcon

53688

downloadIcon

1424

这是一篇 J2ME 入门文章,介绍如何将不同的 J2ME 组件添加到您的应用程序中,特别是 StringItem 和 Command。

引言

创建完应用程序的主界面后,下一步应该考虑的是向界面添加组件,并允许用户执行命令。继续阅读,了解如何向您的 Displayable 添加新项和命令,如何创建和更新 StringItem 内容以显示不可编辑的文本,以及如何创建各种 Command 并处理 Command 操作。

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

注意:您可能也对阅读之前的 J2ME 文章感兴趣:J2ME:Hello World 移动应用程序

以下是最终应用程序的截图

say-hello-screeshot.png

图:应用程序截图

创建组件

构建“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 日:初始发布
© . All rights reserved.