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

📄 cardslist.java

📁 J2ME程序设计实例教程的源码
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import javax.microedition.pim.*;
import java.io.IOException;
import java.util.Vector;

/**
 * CardsList类描述了名片盒的名片列表,提供了名片列表的视图和对名片列表的操作命令。
 */
public class CardsList extends MicroComponent implements CommandListener {
    private CardcaseMIDlet midlet;
    private Display display;
    private Cardcase cardcase;      //名片盒
    private Vector cardsList;       //名片列表
    private List listView;          //名片列表视图
    private SelectionDialog lsDialog;  //新建名片的存储列表
    
    private Command cmdBack = new Command("返回", Command.BACK, 1);
    private Command cmdSelect = new Command("详细", Command.SCREEN, 2);
    private Command cmdEditCard = new Command("编辑名片", Command.SCREEN, 5);
    private Command cmdNew = new Command("新建名片", Command.SCREEN, 2);
    private Command cmdDelete = new Command("删除名片", Command.SCREEN, 3);
    private Command cmdAddToCategory = new Command("添加名片到名片组", Command.SCREEN, 4);
    
    //构造方法
    public CardsList(Cardcase cardcase, CardcaseMIDlet midlet) {
        this.cardcase = cardcase;
        this.midlet = midlet;
        display = Display.getDisplay(midlet);
        listView = new List("名片列表:", Choice.IMPLICIT);   //创建列表视图
        listView.addCommand(cmdBack);
        listView.addCommand(cmdNew);
        listView.setCommandListener(this);
    }
    
    //显示列表视图
    public void show() {
        updateView();
        display.setCurrent(listView);
    }
    
    //更新列表视图
    private void updateView() {
        listView.deleteAll();
        listView.removeCommand(cmdSelect);
        listView.removeCommand(cmdDelete);
        try {   //获得名片盒中最新名片列表
            cardsList = cardcase.getCards(); 
        }
        catch(PIMException pime) {
            midlet.showError("获取名片错误!原因:\n" + pime);
        }
        String cardLabel = "";
        int n = cardsList.size();
        for(int i=0; i<n; i++) {    //添加名片标签
            cardLabel = cardcase.getCardLabel((Contact)cardsList.elementAt(i));
            listView.append(cardLabel, null);
        }
        
        if(listView.size() > 0) {
            listView.setSelectCommand(cmdSelect);
            listView.addCommand(cmdDelete);
            listView.addCommand(cmdAddToCategory);
            listView.addCommand(cmdEditCard);
        }
    }
    
    public void commandAction(Command cmd, Displayable d) {
        if(cmd == cmdBack) {
            midlet.backToMainMenu();    //返回主菜单
        }
        else if(cmd == cmdSelect) {     //显示选择的名片
            int index = listView.getSelectedIndex();
            Contact card = (Contact)cardsList.elementAt(index);
            CardShowForm csForm = new CardShowForm(cardcase, card, midlet, this);
            csForm.show();
        }
        else if(cmd == cmdNew) {    //新建名片命令
            if(lsDialog == null) {
                createListSelectionDialog();   //创建个人信息列表选择对话框
            }
            lsDialog.show();    //显示对话框
        }
        else if(cmd == cmdDelete) { //删除名片
            int index = listView.getSelectedIndex();
            Contact card = (Contact)cardsList.elementAt(index);
            try {
                cardcase.removeCard(card);
                updateView();   //更新视图
            }
            catch(PIMException pime) {
                midlet.showError("删除名片错误!原因:\n" + pime.toString());
            }
        }
        else if(cmd == cmdAddToCategory) {    //添加名片到名片组
            SelectionDialog csDialog = createCategoriesDialog();
            csDialog.show();
        }
        else if(cmd == cmdEditCard) {  //编辑名片   
            int index = listView.getSelectedIndex();
            Contact card = (Contact)cardsList.elementAt(index);
            CardEditor cardEditor = new CardEditor(cardcase, card, midlet, this);
            cardEditor.show();
        }
    }
    
    //该方法创建一个设备联系人列表选择对话框,对话框中列出了当前设备中所有的联系人列表。
    private void createListSelectionDialog() {
        lsDialog = new SelectionDialog(display, "请选择新建名片的存储位置", Choice.IMPLICIT);
        //添加列表名
        final String[] names = cardcase.getAllMemoryName(); //final型量可以被内部类访问
        for(int i=0; i<names.length; i++) {
            lsDialog.append(names[i]);
        }
        
        //为对话框设置监视器,处理用户的操作。用匿名类实现。
        lsDialog.setSelectionDialogListener(new SelectionDialogListener() {
            public void actionDialog(SelectionDialog sd) {
                int handle = sd.getHandle();   //用户的操作
                if(handle == SelectionDialog.OK) {
                    //创建名片
                    int index = sd.getSelectedIndex();
                    Contact card = cardcase.createCard(names[index]);   //names为final型,可以在匿名类中使用
                    
                    //创建名片编辑器,编辑名片
                    CardEditor cardEditor = new CardEditor(cardcase, card, midlet, CardsList.this);
                    cardEditor.show();
                }
                else if(handle == SelectionDialog.CANCEL) {
                    display.setCurrent(listView);
                }
            }
        });
    }
    
    //创建名片组列表对话框
    public SelectionDialog createCategoriesDialog() {
        //获取名片组
        String[] categories = new String[0];
        try {
            categories = cardcase.getCategories();
        }
        catch(PIMException pime) {
            midlet.showError("error: " + pime.toString());
        }
        
        //创建对话框
        SelectionDialog csDialog = new SelectionDialog(display, "请选择名片组", Choice.EXCLUSIVE);
        for(int i=0; i<categories.length; i++) {
            csDialog.append(categories[i]);
        }
        
        //为对话框设置监视器,处理用户的操作。用内部类实现
        csDialog.setSelectionDialogListener(new SelectionDialogListener() {
            public void actionDialog(SelectionDialog sd) {
                int handle = sd.getHandle();   //用户的操作
                if(handle == SelectionDialog.OK) {
                    String category = sd.getSelectedItem();
                    
                    //获取选择的名片
                    int index = listView.getSelectedIndex();    
                    Contact card = (Contact)cardsList.elementAt(index);
                    
                    try {//把名片card添加到categoryName名片组中
                        cardcase.addCardToCategory(card, category);
                        display.setCurrent(listView);
                    }
                    catch(PIMException pime) {
                        midlet.showError("添加名片到\"" + category + "\"组中错误!原因:\n" + pime);
                    }
                }
                else if(handle == SelectionDialog.CANCEL) {
                    display.setCurrent(listView);
                }
            }
        });
        
        return csDialog;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -