j2me框架教程(4)--登录页面的实现

J2ME框架的应用---登录页面

在软件开发中,登录页面是用的比较多的一种,如果我们要上BBS发帖子,那就要先通过登录页面,只有输入的名称和密码是正确的,才能发帖;另外一种,在j2me开发中,有些业务会要求用户输入正确的信息后,才能正常使用软件。这篇教程就是教你如何利用这个框架来开发这种类型的界面。

完成后的界面效果如下图:

 

输入信息后的效果:

 

 

登录成功后的提示页面:

 

如果这个登录模块只是实现最基本的验证功能,那么在这个框架体系下,我们只要写两个类就够了。

第一个类,从Application继承的子类

第二个类,登录按钮类,通过这个类提供的方法,来实现验证功能。

 

开发的步骤如下:

1 编写功能模块。如何编写功能模块,这里就不详说了,参考第一篇。

工程名为Login

2 编写Login类。

package com.frame.login;

 

import javax.microedition.lcdui.Image;

 

import com.frame.application.Application;

import com.frame.application.DisplayFactory;

//import com.frame.util.RecordStoreUtil;

import com.frame.util.ResUtil;

import com.frame.util.XmlUtil;

import com.frame.display.DisplayManager;

 

public class Login extends Application {

       public Login() {

              super();

       }

       public String getName() {

              return "登陆页面演示程序";

       }

       public Image getAppIcon() {

              ResUtil.baseDir = "/login/";

              return ResUtil.getStaticImage("login.png");

       }

       public void doApplication() {       

              XmlUtil.initXmlFile("/login/Index.xml");

              //"Access"是与Index.xml文件的Html节点的Name属性值相同

              DisplayManager.getCurrent().setDisplay(

                            DisplayFactory.getDisplayable("Access"));         

       }

       public void register() {  

              try {

                     Class c = Class.forName("com.frame.login.xml.UserResultBodyItem");

                     addRegItem("UserResult", c);

              } catch (ClassNotFoundException e) {

                     e.printStackTrace();

              }

       }

       public void initialize(boolean isFirst) {         

       }

       public void finalizeApp() {

       }

}

这里要说明的就是register()这个方法,它的作用就是将这个功能模块中,用户自定义的TYPE类型加载到框架中,因为只有提前加载到框架里,那框架在分析你的XML文件的时候,才能够识别用户自定的TYPE

3 编写XML文件。除了框架已经定义好的TYPE类型,用户还可以根据自己的业务需要,来设计自己的TYPE(如何设计自定义的TYPE,会在下篇详细介绍)。在这里,我自定义了一个类型Type="UserResult",在手机屏幕上显示为“ ”,通过这个TYPE,来验证用户信息。

<?xml version="1.0" encoding="UTF-8"?>

<XmlFile>

       <Html Name="Access" AutoSave="1" AutoCache="1">

              <Body>

                     <Item Type="Content">用户登录:</Item>

                     <Item Type="Hr"/>

                     <Item DisplayName="用户名:" Name="name" Default="" Length="20" Width="100" Height="20" Constraints="ANY" TopMargin="2" LeftMargin="2" Type="InputBox"/>

                     <Item DisplayName="    :" Name="pwd" Default="" Length="20" Width="100" Height="20" Constraints="ANY" TopMargin="2" LeftMargin="2" Type="InputBox"/>

                     <Item Type="Hr"/>

                     <Item DisplayName=" " SaveName="UserInfo" TableName="BBS_MEMBER" AHref="Library2/WebInitPage.tkx?Source=ForumLoginPage" Host="ForumUrl" Success="你已经成功登录!" Failure="登录失败,请重试!" Type="UserResult"/>

                     <Item DisplayName=" " Type="Back"/>

              </Body>

       </Html>

</XmlFile>

 

4 编写自定义TYPE的处理类(这个类有点长,以后会详细解释)。

package com.frame.login.xml;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserException;

import com.frame.application.MessageCanvas;

import com.frame.ui.Control;

import com.frame.ui.ControlCollection;

import com.frame.ui.FixContainerControl;

import com.frame.ui.ICommand;

import com.frame.ui.control.ClickText;

import com.frame.ui.control.InputBox;

import com.frame.util.ColorUtil;

import com.frame.util.StringUtil;

import com.frame.xml.AbstractBodyItem;

import com.frame.xml.XmlParseException;

 

public class UserResultBodyItem extends AbstractBodyItem implements ICommand{

    private String saveName;

    private String displayName; // 要显示的名称

    private String tableName;

    private String host;

    private String success;

    private String failure;

    private String href;

    private String userName;

    private String oldPwd;

    private boolean isValid;

 

    public UserResultBodyItem() {

       super();

       success = " 功!";

       failure = " 败!";

       saveName = "";

       displayName = "";

       tableName = "";

       host = "";

       href = "";

       oldPwd = "";     

    }

 

    public int doCommand() {

       ControlCollection controls = this.getCanvas().getControls();

       for (int i = 0; i < controls.size(); i++) {

           Control control = controls.getControl(i);

           if (control instanceof FixContainerControl) {

              FixContainerControl fix = (FixContainerControl) control;

              InputBox inputBox = (InputBox) fix.getControls()

                     .getClickControl(0);

              String name = inputBox.getName();

              String value = inputBox.getInputValue();            

              if ("name".equals(name))

                  this.userName = value;

              else if ("pwd".equals(name))

                  this.oldPwd = value;           

           }

       }

       if("login".equals(userName) && "123".equals(oldPwd)){

           MessageCanvas.getCurrent().showMsg("提示信息", success,

                  "");

       }else

           MessageCanvas.getCurrent().showMsg(failure);

      

       return ICommand.NONE;

    }

 

    public Control getControl() {

       ClickText result = new ClickText();

       result.setText(this.displayName);

       result

              .setSelectedFontColor(getSelectColor() == -1 ? ColorUtil.ITEM_SELECTED_FONTCOLOR

                     : getSelectColor());

       result

              .setUnselectedFontColor(getColor() == -1 ? ColorUtil.ITEM_UNSELECTED_FONTCOLOR

                     : getColor());

       result

              .setUnselectedBackColor(getUnSelectBgColor() == -1 ? ColorUtil.ITEM_UNSELECTED_BGCOLOR

                     : getUnSelectBgColor());

       result

              .setSelectedBackColor(getSelectBgColor() == -1 ? ColorUtil.ITEM_SELECTED_BGCOLOR

                     : getSelectBgColor());

 

       result.setTopMargin(getTopMargin());

       result.setLeftMargin(getRightMargin());

       result.setBottomMargin(getBottomMargin());

       result.setRightMargin(getRightMargin());

 

       result.setCommand(this);

       return result;

    }

 

    public String getType() {

       return "UserResult";

    }

 

    protected void parseXmlData(XmlPullParser parser) throws XmlParseException {

       try {

           int eventType = parser.getEventType();

           String tagName = parser.getName();

           if (!(eventType == XmlPullParser.START_TAG && "Item"

                  .equals(tagName)))

              return;

           setDisplayName(parser.getAttributeValue("", "DisplayName"));

           setHref(parser.getAttributeValue("", "AHref"));

           setHost(parser.getAttributeValue("", "Host"));

           setSaveName(parser.getAttributeValue("", "SaveName"));

           setTableName(parser.getAttributeValue("", "TableName"));

           setSuccess(parser.getAttributeValue("", "Success"));

           setFailure(parser.getAttributeValue("", "Failure"));

           eventType = parser.next();

       } catch (XmlPullParserException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }

    }

 

    protected void readData(DataInputStream dataStream) throws IOException {

       setDisplayName(dataStream.readUTF());

       setHref(dataStream.readUTF());

       setHost(dataStream.readUTF());

       setSaveName(dataStream.readUTF());

       setTableName(dataStream.readUTF());

       setSuccess(dataStream.readUTF());

       setFailure(dataStream.readUTF());

    }

 

    protected void saveData(DataOutputStream dataStream) throws IOException {

       dataStream.writeUTF(displayName);

       dataStream.writeUTF(href);

       dataStream.writeUTF(host);

       dataStream.writeUTF(saveName);

       dataStream.writeUTF(tableName);

       dataStream.writeUTF(success);

       dataStream.writeUTF(failure);

    }

 

    private void setHost(String host) {

       if (host != null)

           this.host = host;

    }

 

    private void setHref(String href) {

       if (href != null)

           this.href = href;

    }

 

    public String getDisplayName() {

       return displayName;

    }

 

    private void setDisplayName(String displayName) {

       if (!StringUtil.isEmpty(displayName))

           this.displayName = displayName;

    }

 

    private void setSaveName(String saveName) {

       if (!StringUtil.isEmpty(saveName))

           this.saveName = saveName;

    }

 

    private void setTableName(String tableName) {

       if (tableName != null)

           this.tableName = tableName;

    }

 

    public void setValid(boolean isValid) {

       this.isValid = isValid;

    }

 

    public void setUserName(String userName) {

       this.userName = userName;

    }

 

    public boolean isValid() {

       return isValid;

    }

 

    public String getSaveName() {

       return saveName;

    }

 

    public String getTableName() {

       return tableName;

    }

 

    public String getOldPwd() {

       return oldPwd;

    }

 

    public String getUserName() {

       return userName;

    }

 

    public String getFailure() {

       return failure;

    }

 

    private void setFailure(String failure) {

       if (failure != null)

           this.failure = failure;

    }

 

    public String getSuccess() {

       return success;

    }

 

    private void setSuccess(String success) {

       if (success != null)

           this.success = success;

    }

}

当点击“登 录”按钮时,会执行doCommand()方法,如果用户名为“login”,密码“ 123 ,会根据xmlsuccess属性的值,出现个提示页面。

 

5 将这个功能模块加入到主工程中。

       1 构建路径里添加这个模块。

       2)  MainMidlet类里,添加一段代码。

       c = Class.forName("com.frame.login.Login");

           addApplication(20, c);  

6 调试

效果如下:

点击这个图标,就会出现登录页面了。

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值