如何在画布中创建多个复选框

时间:2011-11-04 15:45:43

标签: java-me midp lcdui

当我尝试在画布中创建一个复选框时,我遇到了麻烦。

我的复选框工作正常,但我不知道如何存储每个项目的值,这意味着当用户检查第1行,然后他们移动到另一行复选框仍然检查第1行,当用户检查第1行和2并移动到另一行,复选框将检查第1行和第2行。

但我找不到解决这个问题的方法

1 个答案:

答案 0 :(得分:2)

修改你的代码,使用selectTodelete作为布尔数组而不是int,大概如下所示

    // ...initialization of DataList
    boolean[] selectTodelete = new boolean[2]; // instead of int
    { selectTodelete[0] = selectTodelete[1] = false; } // init array
    Command editCommand, backCommand,selectCmd, unselectCmd,selectAll;
    //...

    protected void paint(Graphics g) {
        //...
        for(int i =0 ; i<countRow; i++ ){
            //draw background
            //...
                     if(selectTodelete[i]){ // was selectTodelete == 1
                            //draw select dot at location for row 'i'
                            //...
                     }
            // remove: you don't need that anymore: if(selectTodelete == 2) {
                            //draw select dot...
            //}

            // draw a checkbox before each item
            // ...
        }
    }

    public void commandAction(Command c, Displayable d) {
        //...
        if(c == selectCmd){
            selectTodelete[selectedItem] = true;
        }
        if(c== unselectCmd){
            selectTodelete[selectedItem] = false;
        }
        if(c == selectAll){
            selectTodelete[0] = selectTodelete[1] = true;
        }
        repaint();
    }
    //...
}

更新 - 回答评论中的问题

  

我想让RCID适合检查它意味着检查行时我可以获得此ID,当我使用delete命令时,它将删除所有检查的行

为此,您可以使用getter公开selectTodelete在其类之外使用,或者更好的是,使用下面的方法...

    boolean isSelected(int elementNum) {
        return elementNum >= 0 && elementNum < selectTodelete.length
                && selectTodelete[elementNum];
    } // modelled after javax.microedition.lcdui.Choice.isSelected

...当您需要处理RCID时,可以在任何地方进一步使用这样的信息,例如在下面的方法中:

    Vector useSelection(DataList dataList, DataStore[][] ds) {
        Vector result = new Vector();
        int count = ds.length;
        for(int i = 0; i < count; i++ ) {
            if (!dataList.isSelected(i)) {
                continue; // skip non selected
            }
            System.out.println("RCID selected: [" + ds[i][5].cellText + "]");
            result.addElement(ds[i][5]);
        }
        return result;
    }