SWT でテーブル ウィジェットに並べ替えを追加しようとしています。Snippet2 sortListener
Handler からコードをコピーしても機能しません。2 つの項目を正しく並べ替えて並べ替えます。テーブルに 2 つ以上の項目があり、結果は予測できません。
私には (次の Snippet2 から抽出したコードでsortListener
) 、外側の for ループで繰り返し処理している呼び出された項目 のitems[i].dispose()
配列を変更しようとしているように思えます。アレイ全体が新たに再作成されます。それは確かに反復を壊しますか?TableItems
for (int i = 1 ......
disposed()
だから、私は2つの質問があると思います:
- Snippet2 のアルゴリズムについて理解していないことは何ですか?
- ソート操作がランダムな結果を返す可能性がある他の明らかな理由はありますか?
これが私のコードです:
Listener sortListener = new Listener() {
public void handleEvent(Event e) {
TableItem[] items = table.getItems();
Collator collator = Collator.getInstance(Locale.getDefault());
TableColumn column = (TableColumn)e.widget;
int index = column == column1 ? 0 : 1;
for (int i = 1; i < items.length; i++) { <--------- HERE
String value1 = items[i].getText(index);
for (int j = 0; j < i; j++){
String value2 = items[j].getText(index);
if (collator.compare(value1, value2) < 0) {
String[] values = {items[i].getText(0), items[i].getText(1)};
items[i].dispose(); <--------- HERE
TableItem item = new TableItem(table, SWT.NONE, j);
item.setText(values);
items = table.getItems(); <--------- HERE
break;
}
}
}
table.setSortColumn(column);
}
};