⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cardshowform.java

📁 J2ME程序设计实例教程的源码
💻 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 + -