我正在尝试在 SWT 中向表格小部件添加排序。从 Snippet2sortListener
处理程序复制代码不起作用。它正确地将两个项目交换为排序顺序。表中超过 2 项,结果难以预料。
在我看来(在从 Snippet2 提取的以下代码中sortListener
)items[i].dispose()
将更改TableItems
我们在外部 for 循环中迭代的被调用项的数组,for (int i = 1 ......
此外,当一个项目是disposed()
,并插入到新索引处的项目中时,整个数组被重新创建。那肯定会破坏迭代?
所以,我想我有两个问题:
- 我对 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);
}
};