我用J2ME写了个手机电话本的程序供大家交流学习。
下载点这里
以下是对用到的类的介绍:
1 PhoneTest.java
midlet类,拥有一个转发视图的控制器,在初始化时创建控制器
private static UIController controller;
protected void startApp() throws MIDletStateChangeException {
controller=new UIController(this);
controller.init();
}
2 PhoneRecordStore.java
封装了对电话本RMS操作的方法
//增加记录
public int addPhone(PhoneItem item) {
try {
this.openPhone();
byte[] data=item.getBytes();
int id=phone.getNextRecordID();
int rec =phone.addRecord(data,0,data.length);
this.closePhone();
return id;
} catch (RecordStoreException ex) { }
return -1;
}
//更新记录
public void updatePhone(PhoneItem item){
...
}
//访问一条记录
public PhoneItem getPhone(int id){
...
}
//删除一条记录
public void deletePhone(int id){
...
}
//访问所有记录
public Vector getPhones(){
...
}
这个类内部还创建了一个简单比较器内部类
private class InnerComparator implements RecordComparator{
public int compare(byte[] rec1, byte[] rec2){
if(rec1.length>rec2.length)
return FOLLOWS;
else if(rec1.length return PRECEDES;
else
return EQUIVALENT;
}
}
3 UIController.java
控制器类,拥有所有视图的应用,负责视图的转发
public void handleEvent( int eventID,Object[] args);
方法来完成监听器推出来的事件,设置当前视图
内部类EventID定义了所有的事件。
4 视图类
视图类包括view目录下的所有类
这些类都定义了内部监听器类,监听器监听所有Command事件,并把事件响应推出来让控制器处理
PhoneEdit视图的监听器:
private class PhoneEditListener implements CommandListener{
public void commandAction(Command command, Displayable disp){
if(command==BACK_COMMAND){
controller.handleEvent(UIController.EventID.EVENT_EDIT_BACK,null);
}else if(command==SAVE_COMMAND){
String name=nameField.getString();
String phone=phoneField.getString();
if((name==null||name.equals(""))||(phone==null||phone.equals(""))){
return;
}
item.setName(name);
item.setPhonenum(phone);
Object[] args={item};
controller.handleEvent(UIController.EventID.EVENT_EDIT_SAVE,args);
}//end else
}
}//end inner class
5 PhoneItem.java
plain ordinary java object,存储一条电话记录,不多说了