import java.util.Enumeration;
import java.util.Hashtable;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
public class Exec extends MIDlet {
Display display;
MainForm mainForm;
public Exec() {
mainForm = new MainForm("通讯录", this);
display = Display.getDisplay(this);
}
public void startApp() {
display.setCurrent(mainForm);
}
public void pauseApp() {
display.setCurrent(null);
}
public void destroyApp(boolean unconditional) {
}
public Display getDisplay() {
return display;
}
public void exitApp() {
destroyApp(true);
notifyDestroyed();
}
}
class MainForm extends Form implements CommandListener {
Command cmd1 = new Command("退出", Command.BACK, 1);
Command cmd2 = new Command("显示", Command.OK, 1);
Exec parent;
RecordList recordList;
public MainForm(String title, Exec parent) {
super(title);
this.parent = parent;
recordList = new RecordList("主界面", parent);
addCommand(cmd1);
addCommand(cmd2);
setCommandListener(this);
}
public void commandAction(Command c, Displayable arg1) {
if (c == cmd1) {
parent.exitApp();
} else if (c == cmd2) {
parent.getDisplay().setCurrent(recordList);
}
}
}
class RecordList extends List implements CommandListener {
Command cmdAppend = new Command("追加于后", Command.OK, 1);
Command cmdInsert = new Command("插入于前", Command.OK, 1);
Command cmdSelect = new Command("查看", Command.BACK, 1);
Exec parent;
NewTextBox newTextBox;
BrowseTextBox browseTextBox;
InfoAlert infoAlert = new InfoAlert();
MemoryDataManager dm = MemoryDataManager.getDataManager();
public RecordList(String title, Exec parent) {
super(title, Choice.IMPLICIT);
this.parent = parent;
newTextBox = new NewTextBox("信息", 100, parent, this);
browseTextBox = new BrowseTextBox("内容", 100, parent, this);
addCommand(cmdAppend);
addCommand(cmdInsert);
addCommand(cmdSelect);
setCommandListener(this);
fillRecords();
}
public void fillRecords() {
Hashtable records = dm.getRecords();
Enumeration enu = records.keys();
while (enu.hasMoreElements()) {
String key = (String) enu.nextElement();
this.insert(0, key, null);
}
}
public void commandAction(Command c, Displayable arg1) {
if (c == cmdAppend || c == cmdInsert) {
newTextBox.clearAll();
if (c == cmdAppend)
newTextBox.setFlag("after");
else
newTextBox.setFlag("before");
parent.getDisplay().setCurrent(newTextBox);
} else if (c == cmdSelect) {
if (this.size() > 0) {
parent.getDisplay().setCurrent(browseTextBox);
browseTextBox.getRecord();
} else
parent.getDisplay().setCurrent(infoAlert);
}
// 测试代码:显示存储的记录内容
// Hashtable records = dm.getRecords();
// Enumeration enu = records.keys();
// while (enu.hasMoreElements()) {
// String key = (String) enu.nextElement();
// Hashtable hs = (Hashtable) records.get(key);
// System.out.println(key + ":" + hs);
// }
}
public MemoryDataManager getDm() {
return dm;
}
}
class NewTextBox extends Form implements CommandListener {
Command cmdOK = new Command("确认", Command.OK, 1);
Exec parent;
RecordList list;
String flag;
TextField tfName = new TextField("姓名:", "", 8, TextField.ANY);
TextField tfEmail = new TextField("Email", "", 20, TextField.EMAILADDR);
TextField tfPhone = new TextField("电话:", "", 20, TextField.PHONENUMBER);
public NewTextBox(String title, int size, Exec parent, RecordList list) {
super(title);
this.parent = parent;
this.list = list;
append(tfName);
append(tfEmail);
append(tfPhone);
addCommand(cmdOK);
setCommandListener(this);
}
public void commandAction(Command c, Displayable arg1) {
MemoryDataManager dm = list.getDm();
Hashtable newOne = new Hashtable();
newOne.put("name", tfName.getString());
newOne.put("Email", tfEmail.getString());
newOne.put("Phone", tfPhone.getString());
int recordID = dm.addRecord(newOne);
int index = list.getSelectedIndex();
String result = String.valueOf(recordID);
if (index < 0) {
list.append(result, null);
} else {
if (flag.equals("after"))
list.insert(index + 1, result, null);
else {
list.insert(index, result, null);
}
}
parent.getDisplay().setCurrent(list);
}
public void setFlag(String flag) {
this.flag = flag;
}
public void clearAll() {
for (int i = 0; i < this.size(); i++) {
TextField tf = (TextField) this.get(i);
tf.setString("");
}
}
}
class BrowseTextBox extends Form implements CommandListener {
Command cmdOK = new Command("确认", Command.OK, 1);
Command cmdDelete = new Command("删除", Command.BACK, 1);
Exec parent;
RecordList list;
TextField tfID = new TextField("ID号:", "", 8, TextField.ANY);
TextField tfName = new TextField("姓名:", "", 8, TextField.ANY);
TextField tfEmail = new TextField("Email", "", 20, TextField.EMAILADDR);
TextField tfPhone = new TextField("电话:", "", 20, TextField.PHONENUMBER);
public BrowseTextBox(String title, int size, Exec parent, RecordList list) {
super(title);
this.parent = parent;
this.list = list;
append(tfID);
append(tfName);
append(tfEmail);
append(tfPhone);
addCommand(cmdOK);
addCommand(cmdDelete);
setCommandListener(this);
}
public void getRecord() {
String key = list.getString(list.getSelectedIndex());
MemoryDataManager dm = list.getDm();
Hashtable records = dm.getRecords();
Hashtable record = (Hashtable) records.get(key);
tfID.setString((String) (record.get("id")));
tfName.setString((String) (record.get("name")));
tfEmail.setString((String) (record.get("Email")));
tfPhone.setString((String) (record.get("Phone")));
}
public void deleteRecord() {
String key = list.getString(list.getSelectedIndex());
MemoryDataManager dm = list.getDm();
Hashtable records = dm.getRecords();
records.remove(key);
}
public void commandAction(Command c, Displayable arg1) {
if (c == cmdOK) {
parent.getDisplay().setCurrent(list);
} else if (c == cmdDelete) {
int index = list.getSelectedIndex();
deleteRecord();
list.delete(index);
parent.getDisplay().setCurrent(list);
}
}
}
class InfoAlert extends Alert {
public InfoAlert() {
super("通知");
setType(AlertType.INFO);
setTimeout(1000);
setString("没有记录");
}
}
class MemoryDataManager {
Hashtable records = new Hashtable();
static int totalNumber = 1;
public MemoryDataManager() {
Hashtable h1 = new Hashtable();
h1.put("name", "李树青");
h1.put("Email", "leeshuqing@163.com");
h1.put("Phone", "00862584028398");
addRecord(h1);
Hashtable h2 = new Hashtable();
h2.put("name", "胡哥");
h2.put("Email", "huge@sina.com");
h2.put("Phone", "00861000001111");
addRecord(h2);
}
public static MemoryDataManager getDataManager() {
return new MemoryDataManager();
}
public int addRecord(Hashtable record) {
record.put("id", String.valueOf(totalNumber));
records.put(String.valueOf(totalNumber), record);
return totalNumber++;
}
public void deleteRecord(Hashtable record) {
records.remove(record.get("id"));
}
public Hashtable getRecords() {
return records;
}
}
[此贴子已经被作者于2010-12-12 18:36:48编辑过]