キャンバスにチェックボックスを作成しようとすると問題が発生します。
私のチェックボックスはうまく機能しますが、各項目の値を保存する方法がわかりません。つまり、ユーザーが行 1 をチェックしてから別の行に移動すると、チェックボックスはまだ行 1 をチェックし、ユーザーが行 1 と 2 をチェックして移動すると別の行に、チェックボックスは行 1 と 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 コマンドを使用すると、チェックされたすべての行が削除されます。
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;
}