在上一篇里写了第一个黑莓应用“hello feiyan”,虽然最近很忙,但为了不至于成为弱智博文的典范,还得继续往下写,往复杂了写 :)
今天从实战出发,在上一篇建立的那个工程基础上,拓展一个常见的登录功能。
实现的功能
1, 用户名和密码输入框
2, 登录和退出按钮
3, 用户名密码验证通过后,跳转到上一篇里写的TestUI,如果验证失败,弹出对话框告之用户。
4, 点击“退出”按钮时,弹出确认对话框询问用户。
涉及关键词
VerticalFieldManager
垂直布局管理器,添加到其中的控件将会垂直依次排列。
HorizontalFieldManager
水平布局管理器,添加到其中的控件将会水平依次排列。
ButtonField
按钮控件
EditField
文本编辑框控件
PasswordEditField
密码输入框控件
FieldChangeListener
控件事件监听器,这里用于监听按钮点击事件。
代码
LoginUI.java
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.component.PasswordEditField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
public class LoginUI extends MainScreen implements FieldChangeListener{
private VerticalFieldManager mainManager; //界面整体布局管理器 垂直布局
private HorizontalFieldManager btnManager; //按钮布局管理器 按钮水平布局
private ButtonField btnLogin; //登录按钮
private ButtonField btnQuit; //退出按钮
private EditField nameField; //用户名输入框
private PasswordEditField pwdField; //密码输入框
public LoginUI() {
nameField=new EditField("Username: ", ""); //实例化用户名输入框控件
pwdField=new PasswordEditField("Password: ", ""); //实例化密码输入框控件
mainManager=new VerticalFieldManager(); //界面管理器
mainManager.add(nameField); //将用户名输入框添加到界面管理器
mainManager.add(pwdField); //将密码输入框添加到界面管理器
btnLogin=new ButtonField("Login"); //实例化登录按钮
btnLogin.setChangeListener(this); //设置登录按钮的监听器
btnQuit=new ButtonField("Quit"); //实例化退出按钮
btnQuit.setChangeListener(this); //设置退出按钮的监听器
btnManager=new HorizontalFieldManager(); //实例化按钮布局管理器 实现按钮的水平排列
btnManager.add(btnLogin); //添加登录按钮到按钮布局管理器
btnManager.add(btnQuit); //添加退出按钮到按钮布局管理器
mainManager.add(btnManager); //添加按钮布局管理器到界面布局管理器
this.add(mainManager); //添加界面管理器到当前屏幕
}
//FieldChangeListener需要实现的方法 监听控件事件
public void fieldChanged(Field field, int context) {
if(field instanceof ButtonField){ //触发事件的控件为ButtonField
ButtonField btn=(ButtonField) field;
String label=btn.getLabel(); //获取按钮名字
if(label.equals("Login")){ //点击Login按钮
String userName=nameField.getText();
String pwd=pwdField.getText();
if(userName.equals("feiyan") && pwd.equals("520")){ //验证成功
UiApplication.getUiApplication().pushScreen(new TestUI()); //跳转到TestUI
}else{ //验证失败
Dialog.inform("username or password invalid!"); //弹出对话框告之
}
}else if(label.equals("Quit")){ //点击Quit按钮
//弹出确认对话框询问用户是否确认退出
if( Dialog.ask(Dialog.D_YES_NO, "sure to quit?", Dialog.YES)==Dialog.YES ){
System.exit(0); //退出应用
}
}
}
}
}
然后将BBMain.java中的TestUI(上一篇中写的)换成LoginUI
截图
登录界面
用户名或密码无效
退出确认对话框
几个问题
1, 为什么一进登录界面,就会弹出软键盘,有办法让软键盘一开始不显示吗?
系统默认会将焦点对到第一个控件,本例中第一个控件为文本编辑框,默认文本编辑框获得焦点时,是会弹出软键盘的。
如果不想一进界面就弹出软键盘,有两种办法:将界面第一个控件设置为NullField,它只占一个位置,文本输入框获取不到焦点就不会弹出软键盘了。
或者在初始化LoginUI的时候(构造)使用以下代码