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

J2ME:使用 TextFields 和 Alerts

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2011 年 5 月 12 日

CC (ASA 3U)

6分钟阅读

viewsIcon

58987

downloadIcon

1858

这是一篇 J2ME 入门文章,介绍如何在使用 TextField 和 Alerts UI 组件的应用程序中,使用不同的 J2ME 组件来使其更具用户交互性。

引言

用户输入和通知消息是交互式应用程序最重要的部分之一,而移动应用程序就是其中一种。在本文中,您将学习如何使用文本字段和警报 UI 组件来创建“用户注册” J2ME 应用程序。文本字段是可编辑文本组件,用于接受用户输入。另一方面,警报是一个可显示的屏幕,用于在一段时间内向用户呈现各种信息,然后再进入下一个可显示界面。

有关创建 MIDlet 类、Form 和 J2ME 应用程序中 Command 的更多信息,您可以阅读以下文章

“用户注册”应用程序是一个简单的应用程序,它会询问用户信息并显示注册完成的警报通知。在未来的文章中,您将学习如何验证用户输入并将这些信息保存以供以后使用。该应用程序由一个包含五个文本字段项的主表单组成。这些文本字段项允许用户输入所需的注册字段,即电子邮件、密码、姓名、手机和网站。表单还有两个命令:OK 和 Exit 命令。OK 命令显示一个注册完成通知警报五秒钟,它还使用输入的姓名来感谢用户。 

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

图:应用程序截图

创建表单组件

要创建表单组件,您将首先创建文本字段项。文本字段项可以使用 `TextField` 类的实例来创建,您需要指定四个值

  • 标签,这是一个 `string` 值,用于描述接受的用户输入。
  • 文本,这是字段的初始内容,可以是 `null` 以表示空内容。
  • 最大大小,指定用户可以在字段中输入的字符数限制。
  • 以及输入约束,用于通过多种方式限制用户的输入。例如,如果您传递 `NUMERIC` 约束,则应用程序将只允许用户输入数字字符。

让我们开始创建表单组件,它们是五个文本字段项和两个命令。为此,您将为电子邮件、密码、姓名、手机和网站字段添加五个 `TextField` 数据成员。

public class UserRegistration extends MIDlet implements CommandListener {
    //...
    private TextField emailTxt;
    private TextField passwordTxt;
    private TextField nameTxt;
    private TextField mobileTxt;
    private TextField urlTxt;

    private Command okCmd;
    private Command exitCmd;
    //...
} 

下一步是为每个 `TextField` 数据成员创建一个 `TextField` 类的实例,并传递四个参数(标签、文本、最大大小和输入约束)。第一个文本字段项使用 `EMAILADDR` 约束允许用户输入电子邮件地址,第二个项使用 `PASSWORD`,表示输入的文本是机密数据,不应显示。姓名文本字段项使用 `ANY` 约束表示该字段没有约束,手机项使用 `PHONENUMBER` 约束,它只允许输入数字字符以及像 + 这样的某些字符,最后网站项使用 `URL` 允许用户输入网站地址。

public UserRegistration() {
    //...
    emailTxt = new TextField("Email:", "", 100, TextField.EMAILADDR);
    passwordTxt = new TextField("Password:", "", 16, TextField.PASSWORD);
    nameTxt = new TextField("Name:", "", 50, TextField.ANY);
    mobileTxt = new TextField("Mobile:", "", 15, TextField.PHONENUMBER);
    urlTxt = new TextField("Website:", "", 100, TextField.URL);
} 

创建表单并添加组件

正如我们在上一篇文章中讨论的,有两种方法可以将组件添加到表单中:第一种是使用 `Form` 类的 `append()` 方法,可以在组件数量较少时或在表单创建后需要添加组件时使用。第二种方法是通过传递一个包含要添加的所有项的 `Item` 类的数组来使用构造函数。

由于您有五个项要添加到表单中,您将通过创建一个包含所有五个项的 `Item` 类型数组来使用构造函数,然后将其传递给构造函数。

public UserRegistration() {
    //...
    registrationFrm = new Form("User Registration", new Item[] 
			{emailTxt, passwordTxt, nameTxt, mobileTxt, urlTxt});
}

创建警报

在 J2ME 中向用户发出警报的方法之一是 `Alert` 可显示界面,可以在指定四个值后显示

  • 标题,创建警报时必须作为 `string` 值传递。
  • 文本,即显示给用户的消息。
  • 图像,提供警报类型的指示。
  • 类型,提供警报性质的指示。它可以是以下五个值之一
    • `CONFIRMATION`(提示确认用户操作)
    • `ERROR`(提示用户发生错误操作)
    • `INFO`(向用户提供信息)
    • `WARNING`(提示用户注意潜在的危险操作)
    • `ALARM`(提示用户一个用户先前请求通知的事件)

因此,下一步是将一个 `Alert` 类型的类成员添加到您的 `MIDlet` 类中。

public class UserRegistration extends MIDlet implements CommandListener {
    //...
    private Alert messageAlert;
    //...
} 

然后,您将创建一个 `Alert` 类的实例,并将警报的标题传递给该类,标题将是“Registration Complete”。 

public UserRegistration() {
    //...
    messageAlert = new Alert("Registration Complete");
}

由于警报将显示一段时间,您现在将使用 `setTimeout()` 方法和警报类型 `CONFIRMATION` 来以毫秒为单位指定此时间。

public UserRegistration() {
    //...
    messageAlert.setTimeout(5000);
    messageAlert.setType(AlertType.CONFIRMATION);
} 

读取文本字段内容

您可以使用 `TextField` 的 `getString()` 方法随时读取用户输入的文本字段内容,也可以使用 `setString()` 方法更改它,但首先您需要处理 OK 和 Exit 命令的操作。

public void commandAction(Command c, Displayable d) {
    if (d == registrationFrm) {
        if (c == okCmd) {
            //Show Message command action
        }
        //Exit command action
        //...
    }
} 

下一步是使用 `getString()` 方法从姓名文本字段读取姓名,然后构建一个简单的感谢消息。

if (c == okCmd) {
    String messageContent;
    messageContent = "Thanks " + nameTxt.getString() + "\nRegistration Complete.";
} 

显示警报和内容

每个可显示界面都可以使用 `Display` 对象的 `setCurrent()` 方法来显示,但这次您需要将下一个可显示界面参数传递给此方法。由于警报会在一段时间后超时,下一个可显示界面将在此之后直接显示。

最后一步将是使用 `setString()` 设置警报文本,并使用 `setCurrent()` 方法显示它,并将注册表单作为下一个可显示界面。

if (c == okCmd) {
    //...
    messageAlert.setString(messageContent);

    display.setCurrent(messageAlert, registrationFrm);
} 

结论

在本文中,您学习了如何使用 J2ME 通过文本字段项接受用户输入,以及 J2ME 如何使用不同的输入约束进行简单的 D数据验证。您还学习了如何使用通知警报来向用户发出应用程序中特定事件的通知,例如警报、错误、警告和其他类型的消息,持续一段时间。

以下是完整的应用程序代码、可下载的 *.java 文件以及最终应用程序结果的 *.jar 文件。 

请不要忘记分享本文,如果您有任何问题,请留下评论。

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class UserRegistrationMIDlet extends MIDlet implements CommandListener {
    private Display display;
    private Form registrationFrm;

    private Alert messageAlert;

    private TextField emailTxt;
    private TextField passwordTxt;
    private TextField nameTxt;
    private TextField mobileTxt;
    private TextField urlTxt;

    private Command okCmd;
    private Command exitCmd;

    public UserRegistrationMIDlet() {
        emailTxt = new TextField("Email:", "", 100, TextField.EMAILADDR);
        passwordTxt = new TextField("Password:", "", 16, TextField.PASSWORD);
        nameTxt = new TextField("Name:", "", 50, TextField.ANY);
        mobileTxt = new TextField("Mobile:", "", 15, TextField.PHONENUMBER);
        urlTxt = new TextField("Website:", "", 100, TextField.URL);

        registrationFrm = new Form("User Registration", 
		new Item[] {emailTxt, passwordTxt, nameTxt, mobileTxt, urlTxt});

        messageAlert = new Alert("Registration Complete");
        messageAlert.setTimeout(5000);
        messageAlert.setType(AlertType.CONFIRMATION);

        okCmd = new Command("OK", Command.OK, 0);
        exitCmd = new Command("Exit", Command.EXIT, 1);

        registrationFrm.addCommand(okCmd);
        registrationFrm.addCommand(exitCmd);

        registrationFrm.setCommandListener(this);
    }

    protected void startApp() {
        display = Display.getDisplay(this);
        display.setCurrent(registrationFrm);
    }

    public void commandAction(Command c, Displayable d) {
        if (d == registrationFrm) {
            if (c == okCmd) {
                String messageContent;
                messageContent = "Thanks " + nameTxt.getString() + 
					"\nRegistration Complete.";

                messageAlert.setString(messageContent);

                display.setCurrent(messageAlert, registrationFrm);
            } else if (c == exitCmd) {
                notifyDestroyed();
            }
        }
    }

    protected void pauseApp() {
    }

    protected void destroyApp(boolean unconditional) {
    }
}

历史

  • 2011年5月12日:初次发布
© . All rights reserved.