Как да създадете множество квадратчета за отметка в canvas

Получавам проблеми, когато се опитвам да създам квадратче за отметка в canvas.

Квадратчето ми за отметка работи добре, но не знам как да съхранявам стойността на всеки елемент, което означава, че когато потребителят провери ред 1 и след това се премести на друг ред, квадратчето за отметка все още поставя отметка в ред 1 и когато потребителят провери ред 1 и 2 и се премести към друг ред, квадратчето за отметка ще постави отметка на ред 1 и 2.

Но не мога да намеря решение за този проблем


person MYE    schedule 04.11.2011    source източник


Отговори (1)


променете кода си, за да използвате 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 годен за отметка, това означава, че когато редът е отметнат, мога да получа този идентификатор и когато използвам команда за изтриване, тя ще изтрие всички проверени редове

За това можете да изложите selectTodelete за използване извън неговия клас с getter или, още по-добре, с метод като по-долу...

    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;
    }
person gnat    schedule 05.11.2011
comment
извинявай братко, мога ли да те задам още един въпрос. в моя код искам да получа RCID, годен за проверено, това означава, че когато редът е бил отметнат, мога да получа този идентификатор и когато използвам команда за изтриване, тя ще изтрие всички проверени редове. Благодаря ти - person MYE; 05.11.2011
comment
@MYE Актуализирах отговора, за да покажа как да използвам selectTodelete за работа с RCID - person gnat; 05.11.2011
comment
Благодаря ви много, но се чудя как да го добавя в масив, защото трябва да получа идентификатор, за да изтрия елемент - person MYE; 06.11.2011
comment
чудя се как да конвертирам Vector в J2Me в int масив, защото трябва да получа int стойност, за да изтрия запис в набор от резултати. В j2me може да бъде vector().toArray, но в J2me как да направите това? - person MYE; 11.11.2011
comment
@MYE, ако имате нужда от int стойност, няма нужда да конвертирате. За да получите тази стойност при индекс i, просто използвайте векторен метод elementAt: ((Integer)(vector.elementAt(i))).intValue() - person gnat; 14.11.2011