📄 cardshowform.java
字号:
import javax.microedition.pim.*;
import javax.microedition.lcdui.*;
import java.util.*;
/**
* CardShowForm类是个名片数据显示视图,只负责显示名片信息,不能编辑名片。
*/
public class CardShowForm extends MicroComponent implements CommandListener, ItemCommandListener {
//
private CardcaseMIDlet midlet;
private MicroComponent backScreen;
private Cardcase cardcase;
private Contact card; //名片
private Form cardView; //名片视图
private Command cmdBack = new Command("返回", Command.BACK, 1);
private Command cmdShowPhoto = new Command("显示", Command.SCREEN, 2);
//构造方法
public CardShowForm(Cardcase cardcase, Contact card, CardcaseMIDlet midlet, MicroComponent backScreen) {
this.midlet = midlet;
this.backScreen = backScreen;
this.cardcase = cardcase;
this.card = card;
String lab = cardcase.getCardLabel(card);
cardView = new Form("名片——" + lab);
cardView.addCommand(cmdBack);
cardView.setCommandListener(this);
}
//显示视图
public void show() {
updateView();
Display.getDisplay(midlet).setCurrent(cardView);
}
//更新名片视图
private void updateView() {
cardView.deleteAll(); //清除视图
//获取名片card使用的字段
int[] usedFields = cardcase.getUsedFields(card);
for(int i=0; i<usedFields.length; i++) {
if(usedFields[i]==Contact.CLASS) { //忽略CLASS字段
continue;
}
//在cardView中添加被使用的字段
populateField(usedFields[i]);
}
if(cardView.size() == 0) {
cardView.append("<没有数据>");
}
//获取名片组信息
String[] categories = card.getCategories();
StringBuffer sb = new StringBuffer();
for(int i=0; i<categories.length; i++) {
if(sb.length() > 0) {
sb.append(",");
}
sb.append(categories[i]);
}
String s = sb.toString().trim();
if(s.length() > 0) {
cardView.append(new StringItem("名片组: ", s));
}
else {
cardView.append(new StringItem("名片组: ", "<未分组>"));
}
}
//向视图中添加一个表示field字段的Item组件,该方法在更新视图时调用。
private void populateField(int field) {
//获取字段field的数据类型
int fieldType = cardcase.getFieldType(card, field);
String val = null;
switch(fieldType) {
case Contact.BOOLEAN: { //处理boolean类型的字段
val = card.getBoolean(field, 0)?" 是":" 否";
break;
}
case Contact.INT: { //处理int类型字段
val = String.valueOf(card.getInt(field, 0));
break;
}
case Contact.DATE: { //处理日期类型的字段
long dt = card.getDate(field, 0);
Calendar cale = Calendar.getInstance();
cale.setTime(new Date(dt));
StringBuffer sb = new StringBuffer();
sb.append(cale.get(Calendar.YEAR)); sb.append("年");
sb.append(cale.get(Calendar.MONTH) + 1); sb.append("月");
sb.append(cale.get(Calendar.DAY_OF_MONTH)); sb.append("日");
val = sb.toString();
break;
}
case Contact.STRING: { //处理字符串类型的字段
val = card.getString(field, 0);
break;
}
case Contact.STRING_ARRAY: {
String[] a = card.getStringArray(field, 0);
if(a != null) {
val = cardcase.joinStringArray(a);
}
break;
}
case Contact.BINARY: {
byte[] data = card.getBinary(field, 0);
if (data != null) {
val = data.length + " bytes";
}
break;
}
}
if(val != null) {
String fieldLabel = cardcase.getFieldLabel(card, field);
StringItem viewItem = new StringItem(fieldLabel, val);
if(field == Contact.PHOTO) { //照片
viewItem.setDefaultCommand(cmdShowPhoto); //添加显示照片命令
viewItem.setItemCommandListener(this);
}
cardView.append(viewItem);
}
}
//处理视图命令
public void commandAction(Command cmd, Displayable d) {
if(cmd == cmdBack) {
backScreen.show();
}
}
//显示照片
public void commandAction(Command cmd, Item item) {
if(cmd == cmdShowPhoto) { //显示照片
/*------------------请读者完成该功能------------------*/
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -